意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类.
动机:在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。
适用性:
以下情况可以使用工厂方法模式:
当一个类不知道它所必须创建的对象的类的时候;
当一个类希望由它的子类来指定他所创建的对象的时候
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将那一个帮助子类是代理者这一信息局部化的时候。
结构:
参与者:
Product : 定义工厂方法所创建的对象的接口
ConcreteProduct : 实现product接口
Creator : 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个ConcreteProduct对象。
ConcreteCreator: 重定义工厂方法以返回一个ConcreteProduct实例
效果:
(1) 为子类提供钩子(hook)用工厂方法在一个类的内部创建对象通常比直接创建对象更加灵活。
(2) 连接平行的类层次,工厂方法并不是只被Creator调用,客户可以找到一些有用的工厂方法,尤其在平行的类层次情况下。
实现:
实现工厂方法模式的时候要考虑下面几个问题:
主要由两种情况:Creator是一个抽象类不提供它所声明的工厂方法的缺省的实现;Creator是一个具体类,并提供缺省的实现。
参数化工厂方法
特定的编程语言的变化和问题
使用模板以避免创建子类
代码示例如下:
1 |
|