这里要说的是工厂方法模式。
1. 工厂方法模式的定义:工厂方法模式定义了创建对象的接口,但让子类来决定实例化哪个product类,推迟类的实例化到子类。
2. 工厂方法负责对象的创建,实际的对象创建在子类中进行。这使得父类的client code(调用工厂方法的代码)与子类的创建代码解藕。抽象方法在Creator的父类中定义,一般定义如下:
abstract Product factoryMethod(String type)
Creator子类必须实现工厂方法。实现了对interface编程而不是instance编程。符合“对扩展开放,对修改关闭”的OO原则。
3.工厂方法模式和简单工厂的区别:简单工厂父类has a factory,由factory来对product实例化。工厂方法模式中creator的父类中有一个抽象工厂方法,creator的子类负责实现这个方法即负责创建product实例。
4.工厂方法模式实现了依赖反转。如果不使用工厂方法模式,creator负责创建所有product子类,因此它依赖于所有具体的product子类。但工厂方法中creator和 product的子类都只依赖于抽象的product父类,实现了“依赖于接口,而不依赖于具体实现”的OO原则 。
5.依赖反转原则:
No variable should hold a reference to a concrete class.
不要用new,用工厂来创建。
No class should derive from a concrete class.
从接口继承,不要继承于具体类。
No method should override an implemented method of any of its base classes.
如果你重写父类已实现的方法,则你类并不是真正的抽象。父类实现的方法应该让所有子类共享。
这只是原则,并非法律!
简单工厂的好处:
1、充分利用了多态性不管什么具体产品都返回抽象产品。
2、充分利用了封装性,内部产品发生变化时外部使用者不会受到影响。
缺点是:如果增加了新的产品,就必须得修改工厂(Factory)。
这种没头没尾的文章确实不好,推荐一入篇好的设计模式的文章:
http://blog.youkuaiyun.com/xmouse/article/details/2281920