一、概念
1.1、定义
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
- AbstractFactory,抽象工厂类,定义工厂能够生产哪些产品,即产品簇。
- ConcreteFactory,具体工厂类:根据不同的需求扩展不同产品簇
- AbstractProduct,抽象产品类:产品特性抽象
- Product,具体产品类:根据不同需求创建不同产品
1.2、解决的问题
问题分析:工厂模式下,一个工厂只生成一种产品。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。
模式解决思路:在工厂模式下面,修改抽象工厂基类,让一个工厂支持创建多个的产品方法接口。
二、模式的应用和优缺点
2.1、应用场景
- 应用场景:
1、QQ 换皮肤,一整套一起换。
2、生成不同操作系统的程序。
2.2、优缺点
优点:
1、抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。
2、当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式。缺点:
由于AbstractFactory需要定义好能够生产的哪些种类的产品,相当于定义好产品线,如果后期需要扩展产品线,则没办法实现。
其他
三种工厂模式的区别:
- 简单工厂:根据key、type、字符串等命令来创建对应的产品。
- 工厂方法:抽象工厂接口或者基类,多态工厂;实现无限的扩充对应的产品和工厂,一个工厂一个产品。
- 抽象工厂:一个工厂具有生成多种产品的能力,而不仅局限与单一产品。