andy
FACTORY METHOD(工厂方法)---对象创建型模式
-
意图(intent)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
2、动机(motivation)
框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。工厂方法解决了框架必须实例化类,但是它只知道不能实例化的抽象类的问题。在软件系统中,经常面临着某个对象的创建工作。随着需求的变化,该对象发生着激烈的变化,而其接口却是稳定不变的。如何提供一种封装机制,隔离出这个易变的对象,从而保证依赖该对象的对象不随着需求的变化而不断变化。
Factory Method主要是为了隔离类对象的使用者和具体类型之间的耦合关系。当一个具体类型经常发生剧烈变化时,紧耦合关系会使软件系统变得非常脆弱。
Factory Mehtod方法使一个具体类的创建工作延迟到子类来实现,从而实现一个扩展的策略,较好地解决了这种紧耦合关系。
Factory Method解决单个对象的需求变化。Abstract Factory解决一系列对象的需求变化。Builder模式解决复杂对象内部各个对象部分的需求变化。
3、适用性 :
-
当一个类不知道它所必需创建的对象的类的时候。
-
当一个类希望由它的子类指定所创建对象的时候。
-
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
4、结构:
5、参与者
Product:剧烈变化对象类的统一接口。 定义工厂方法所创建的对象的接口。
ConcreteProduct:剧烈变化的对象。 实现Product接口
Creator:
-
声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
-
可以调用工厂方法以创建一个Product对象。
ConcreteCreator:重新定义工厂方法返回一个ConcreteProduct实例。
6、协作
Creator依赖它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例。
7、效果
-
工厂方法不再将与特定应用有关的类绑定到你的代码中,代码仅仅处理Product接口。 因此它可以与用户定义的任何concreteP
-
为子类提供挂钩(hook)。用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。Factory Method给子类一个挂钩以提供对象的扩展版本。
-
连接平行的类层次。当一个类将它的一些职责委托给另一个类的时候,就产生了平行类层次。
8、实现
当应用Factory Method模式时需要考虑下面一些问题:Factory Method主要有两种不同的情况:一是Creator类是一个抽象类并且不提供它所声明的工厂方法的实现;二是Creator类是一个具体类而且为工厂方法提供一个缺省的实现。
构造器只是将产品初始化为0,而不是创建一个具体的产品。访问者返回该产品但首先它要检查该产品的存在,如果该产品不存在,访问者就创建它。这种方法被称为lazyinitialization.