Abstract Factory 模式简介:
意图:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
使几个对象需要以一种协调的方式实例化。
在这个模式中:
- 客户对象只知道向谁请求所需的对象和如何使用这些对象;
- Abstract Factory 类通过为每个不同类型的对象定义一个方法,来指定实例化哪个对象,一般而言,对于每一种必须实例化的对象,Abstract Factory 对象都有一个相应的方法。
- 具体的工厂对象指定哪些对象要实例化。
为什么要将Abstract Factory模式如此命名?
初看起来,很容易认为这是因为工厂是用每种情况都有一个派生类的抽象类实现的。但事实并非如此,这个模式之所以称为Abstract Factory,是因为它要创建的东西本身是由抽象定义的。工厂各种变化的实现如何选择,模式并没有具体规定。
Abstract factory 模式的关键特征:
- 意图:需要为特定的客户组(或情况)提供对象组。
- 问题:需要实例化一组相关的对象。
- 解决方案:协调对象组的创建。提供一种方式,将如何执行对象实例化的规则从使用这些对象的客户对象提取出来。
- 参与者与协作者:AbstractFactory为如何创建对象组的每个成员定义接口。一般每个组都由独立的ConcreteFactory进行创建。
- 效果:这个模式将“使用哪些对象”的规则与“如何使用这些对象”的逻辑分离开来。
- 实现:定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。可以用表或文件完成同样的任务。
Abstract Factory 模式为我们提供了一种新的分解方式——根据职责分解。使用这种方法可以将问题分解为:
- 谁在使用我们的特定对象;
- 谁来决定使用那些特定对象;