上篇博客总结的是简单工厂和工厂方法的异同,详见《简单工程PK工厂方法》。这次就来聊聊工厂家族最后一个成员——抽象工厂
1抽象工厂
1.1定义:
1.2UML结构图:
- AbstractProductA(B):抽象产品,因为是抽象产品,所以有可能有不同的实现方法。
- ProductA1 ProductA2 ProductB1 ProductB2 都是两个抽象产品的具体分类的实现。
- AbstractFactory:抽象工厂,具体的工厂去继承这个抽象工厂。
1.3UML实例
1.4自己的理解
2 工厂方法和抽象工厂的异同
1.从以上两张类图,可以清楚的看出两者的区别,工厂方法:抽象产品只有一个类的时候,这种模式就是工厂方 法;当出现多个类的时候,就是抽象工厂。所以说抽象工厂是工厂方法的升级版。
2.工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一 个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽 象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
3 抽象工厂的优缺点
优点:
1.封装性:软件设计强调面向接口编程,不要面向过程编程,抽象工厂这一点做的很好,我们不需要知道产品是如 何被实现的,实现类不是高层模块所关心的,高层模块关心的是谁负责这个产品,谁能生产出来这个产品,所以只 要知道这个接口就行了,各个工厂把具体的实现方法封装到自己的模块中,而只对外开放一个接口,达到解耦的目 的
2.最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象 工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。(但是这 个优点我不是很理解)
缺点:
4总结:
工厂家族的结构都非常的相似,无非是抽象的层次有所不同。其实在应用中,这三种模式也不是一成不变的,他们经常相互作用演化出不同的样式,这就需要我在今后的日子中多琢磨他们的关系,抓住他们各自的特点,现在觉得设计模式越来越好玩了~