标签
抽象工厂模式适用于创建多个产品族的情况,提供了一种稳定的创建对象的方式,使得系统的扩展性、维护性更强。
定义
抽象工厂模式是一种创建型设计模式,用于提供一个接口来创建一系列相关或相互依赖的对象,而无需指定具体类。它允许客户端通过抽象接口创建不同类型的产品,且这些产品属于同一产品族。
特点:抽象工厂模式更适合需要创建多个相关产品的场景,并有助于保持产品族的一致性。
结构
抽象工厂模式的主要结构包括以下角色:
- 抽象工厂(AbstractFactory):定义用于创建一族产品的抽象方法。
- 具体工厂(ConcreteFactory):实现抽象工厂,生成一组相关的具体产品。
- 抽象产品(AbstractProduct):定义产品的接口。
- 具体产品(ConcreteProduct):实现抽象产品接口,提供实际产品。
类图
代码实现
以下代码实现了一个抽象工厂模式示例,用于创建两个产品类型(产品A和产品B)的不同实现。
优点
- 符合开闭原则:添加新产品族时,无需修改已有代码。
- 隔离客户端与具体实现:客户端只需知道抽象接口,不直接依赖具体类。
- 一致性:确保产品族中的对象具有一致性。
缺点
- 增加复杂性:添加一个产品族,需要增加多个类,代码较为庞大。
- 不适合频繁更改产品结构的场景:每次更改产品结构,都可能影响抽象工厂的定义。
使用场景
- 创建多种相关产品,并且希望客户端不依赖具体类。
- 产品族有相同的接口或抽象基类,但具体实现不同。
- 产品族扩展频繁,需支持创建更多的新产品族。
抽象工厂模式与其他工厂模式对比
- 简单工厂模式:适合产品种类少的情况,集中在一个工厂类中实现,容易变得庞大。
- 工厂方法模式:每个工厂只负责创建一种产品,适合单一产品的扩展性要求。
- 抽象工厂模式:创建多个产品族的对象,适合产品种类较多、扩展性要求较高的场景。