我知道设计模式中把变化的和不变的分离,把变化分离出来,继承个抽象,而后在不变的代码中使用这个抽象,
但我的问题,我使用这个接口后,哪天客户需求一变,在原有的功能上添加新功能,我就还需要写的实现类(这没问题),但使用这个抽象的代码,还是需要new 一个我新创建的对象,等于我还是修改的代码,
请问,这不是没做到开放-封闭原则么?
注:(不能用spring实现解耦的情况下)
------解决方案--------------------
封装有许多好处,比如隐藏数据,隐藏实际类型和应对变化等,比如A模块需要利用B模块传过来的一个对象,比如Afunction(ClassB &),不管传过来的是B的哪个子类,A模块都不关心,就按照原来的调用方式就可以工作了,这些都需要利用封装来达到
------解决方案--------------------
代表你没使用工厂模式
而是直接使用MyInterface i = new MyImpl();
这种方式
高阶语言的话,可以使用反射代替工厂模式
- C# code
string DllName = ConfigurationSettings.AppSettings["DllName"]; string ClassName = ConfigurationSettings.AppSettings["ClassName"]; Orz orz = Assembly.Load(DllName).CreateInstance(ClassName) as Orz;
------解决方案--------------------
一个生成对象使用创建型模式,这样你增加一个新类,然后修改创建型模式的部分代码即可。