仅供自己参考
1将一对类的实现放在一个工厂函数里面,根据工厂收到的参数可以创建不同的对象,有利于减少类的耦合性, 客户端不需要知道有哪些类,他只知道工厂类,
优点:
1.隐藏了对象创建的细节,将产品的实例化推迟到子类中实现。
2.客户端基本不用关心使用的是哪个产品,只需要知道用哪个工厂就行了,提供的类型也可以用比较便于识别的字符串。
3.方便添加新的产品子类,每次只需要修改工厂类传递的类型值就行了。
4.遵循了依赖倒转原则。
缺点
1.要求产品子类的类型差不多,使用的方法名都相同,如果类比较多,而所有的类又必须要添加一种方法,则会是非常麻烦的事情。或者是一种类另一种类有几种方法不相同,客户端无法知道是哪一个产品子类,也就无法调用这几个不相同的方法。
2.每添加一个产品子类,都必须在工厂类中添加一个判断分支,这违背了开放-封闭原则。
设计原则
找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。
Program to an interface, not an implementation.(面向接口编程,而不要面向实现编程。)
Favor composition over inheritance.(优先使用对象组合,而非类继承)
工厂模式消除了简单工厂模式的缺点,简单工厂模式在添加类的时候会修改类,违反了开放封闭原则,但是每次增加,都会增加一个新的工厂类 .
简单的来说就是工厂抽象为一个抽象类,然后让每个子类继承抽象类,这样就有利于类的拓展
参考
http://www.cnblogs.com/cxjchen/p/3143633.html
http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html