抽象工厂模式的理解
<<设计模式>>书中指出抽象工厂模式的意图:“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。”首先我说一下我对这句话的理解有三点:
1. 一系列相关或相互以来的对象,这半句话表明抽象工厂模式的使用范围为:产品分为几个系列,在每个系列中,产品的布局都是要同的,在一个系列中某个位置的产品,在另一个系列中一定有一个对应的产品。这样的产品结构是存在的,这几个系列中同一位置的产品可能是互斥的,它们是针对不同客户的解决方案,每个客户都只择其一。也就是说,抽象工厂模式产生多类一系列的对象,这些对象具有如下特征:相关或者相互依赖。
2. 提供一个接口,也就是我们定义的抽象工厂。
3. 而无需指定它们具体的类:在调用的代码中我们不指明具体的类是什么,把这个责任交给工厂来解决。
Abstract Factory模式的关键特征:
1. 意图:为特定的客户提供特定的对象组,也就是提供一个具体的工厂。
2. 问题:需要创建多组相关的一系列的对象,也就是需要实例化多组相关的对象。
3. 解决方案:提供一种方式,将如何执行对象实例化的规则从使用这些对象的代码中提取出来,同时把这些代码封装到工厂中。
4. 参与者与协作者:AbstractFactory为如何创建对象组的每个成员定义接口。一般每个组都由独立的ConcreteFactory进行创建。
5. 效果:这个模式将“使用哪些对象”的规则与“如何使用这些对象”的逻辑分离开来。
6. 实现:定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。
Abstract Factory模式的总结:
在必须协调一组对象的创建时,可以应用Abstract Factory模式。它提供了一种方式,将如何执行对象实例化的规则从使用这些对象的客户对象中提取出来。
如何使用AbstractFactory模式:
1. 首先,找出实例化规则,定义一个带接口的抽象类,其中的接口为每种需要实例化的对象提供一个方法。
2. 然后从这个类派生出各个组的实现类。
3. 客户对象使用具体工厂对象创建的服务对象。
对需求的变化的策略:
抽象工厂模式更注重是相关或者相互依赖的一系列对象,一旦需要改动,只修改某一个具体工厂即可到达修改整个产品系列的目的。
下面是我做的一个例子的模型图:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/fzy816/firstUml.jpg)