设计模式:学习笔记(6)——抽象工厂模式
设计模式:学习笔记(6)——抽象工厂模式
抽象工厂模式
在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂都对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。此时我们需要使用抽象工厂模式。
抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对同一产品“大类”,而抽象工厂模式可以生产多个产品“大类”。
说明:在这里呢,我们可以理解一个“大类”为一个抽象产品接口。
模式定义
抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。
这个概念依然抽象难懂,但是如果你已经阅读了工厂(方法)模式,那我们直接看类图即可更加容易理解。

抽象工厂模式中的角色与工厂方法相同,也是4个角色:
- 抽象工厂角色
- 具体工厂角色
- 抽象产品角色
- 具体产品角色
模式分析
优缺点
抽象工厂模式的主要优点依然是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建多个“大类”的对象,增加大类和大类对象比较方便,但是还是需要修改抽象工厂和具体工厂的代码,违反了开闭原则。
模式应用
在很多软件系统中需要更换界面主题,要求界面中的按钮、文本框、背景色等一起发生改变时,可以使用抽象工厂模式进行设计。
实例
如下是一个抽象工厂模式的实例,现在抽象工厂可以生成多个产品“大类”
interface AbstractFactory{
Phone createPhone(String param);
Mask createMask(String param);
}
class SuperFactory implements AbstractFactory{
@Override
public Phone createPhone(String param) {
return new iPhone();
}
@Override
public Mask createMask(String param) {
return new N95();
}
}
interface Phone{
}
class iPhone implements Phone{
}
interface Mask{
}
class N95 implements Mask{
}
参考资料
- https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/abstract_factory.html
- 《设计模式(Java版)》

浙公网安备 33010602011771号