在我们设计编码过程中,“针对接口编程”已经是非常共识的了,于是很多地方出现类似的代码:
InterfaceX interfaceObject=InterfaceFactory.getInstance(); //此处InterfaceFactory是具体类,即简单工厂
或
InterfaceX interfaceObject=InterfaceFactory.getInstance("type");
这样就使得当前类只依赖于InterfaceX 而不是具体的实现了;
但是我认为如果InterfaceFactory可能变化,则不应该使当前类依赖于InterfaceFactory
[将违反OCP],更近一步,该方式造成了对InterfaceFactory的依赖,通过工厂方法模式将InterfaceFactory变为接口可以解决OCP的问题,但我们不禁要问
为什么当前类要依赖InterfaceFactory呢?这是一个多余的依赖呀!此时使用Ioc才是最好的方案.
结论:
1、 当工厂比较稳定时才应当使用简单工厂;
2、 当实现类要有非常多的扩展时要使用工厂方法模式〔即包含工厂方法的类应该是抽象的〕;
3、 在适宜的时机使用Ioc不使用工厂。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=343145