一、抽象工厂模式(Abstract Factory)
定义:提供一个穿件一系列相关或相互依赖对象的接口,而无需制定他们具体的类
抽象工厂模式与工厂方法模式最大的区别在于:抽象工厂中每个工厂可以创建多种类的产品,而工厂方法每个工厂只能创建一个类
二、抽象工厂模式UML图
(1)AbstractProductA和AbstractProductB:是两个抽象产品
(2)ProductA1、ProductA2和ProductB1、ProductB2:是对两个抽象产品的具体分类的实现
(3)AbstractFactory:是一个抽象工厂的接口,包含了所有产品创建的抽象分类方法
(4)ConcreteFactory1和ConcreteFactory2:是具体的工厂
三、优点
- 易于交换产品系列,只需要改变具体工厂即可使用不同的产品配置
- 让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中
- 符合单一职责原则、开放-封闭原则
四、总结
之前学到了简单工厂,工厂方法,现在又多了一个抽象工厂,简单的总结下它们
1.简单工厂一旦添加一个新的功能就需要修改之前类的方法逻辑,违背了开放-封闭原则(即简单工厂模式的缺点),所以工厂方法就来了
2.工厂方法能解决简单工厂问题,因为工厂方法模式是把具体需要创建哪个类交给抽象工厂中的子类来决定的,工厂类不在负责所有产品的创建,只是给出了必须实现的接口,这样在工厂方法模式中添加新功能的时候就不需要修改类的逻辑,直接添加新的工厂子类就可以了,符合了开放-封闭原则
3.抽象工厂中每个工厂可以创建多种类的产品,而工厂方法每个工厂只能创建一个类(也会导致工厂个数太多,系统繁杂庞大)