Alias: virtual constructor 虚构造器
Intent
Define an interface for creating an object, but letsubclasses decide which class to instantiate. FactoryMethod lets a class defer instantiation to subclasses.
(定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。 )
Motivation
Frameworks use abstract classes to define and maintainrelationships between objects. A framework is oftenresponsible for creating these objects as well.
1)优点
多态性:客户代码可以做到与特定应用无关, 适用于任何实体类
Connects parallel class hierarchies提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。 -- 加一层间接性,增加了灵活性
Connects parallel class hierarchies
良好的封装性,代码结构清晰。
扩展性好,在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“ 拥抱变化”
屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。
典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心,符合迪米特法则,符合依赖倒臵原则,符合里氏替换原则。
2)缺点
需要Creator和相应的子类作为factory method的载体,如果应用模型确实需要creator和子类存在,则很好;否则的话, 需要增加一个类层次