创建型 | 结构型 | 行为型 |
---|---|---|
工厂方法(Factory Method)<类> | 适配器(Adapter)<类, 对象> | 解释器(Interpreter)<类> |
抽象工厂(Abstract Factory)<对象> | 桥接(Bridge)<对象> | 模板方法(Template Method)<对象> |
建造者(Builder)<对象> | 组合(Composite)<对象> | 责任链(Chain of Responsibility)<对象> |
原型(Prototype)<对象> | 装饰者(Decorator)<对象> | 命令(Command)<对象> |
单例(Singleton)<对象> | 外观(Facade)<对象> | 迭代器(Iterator)<对象> |
享元(Flyweight)<对象> | 中介者(Mediator)<对象> | |
代理(Proxy)<对象> | 备忘录(Memento)<对象> | |
观察者(Observer)<对象> | ||
状态(State)<对象> | ||
策略(Strategy)<对象> | ||
访问者(Visitor)<对象> |
抽象工厂模式
模式描述
抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式与工厂方法模式很多人容易混淆相关作用:工厂方法主要作用是通过子类继承实现对象实例化的代码从具体类中解耦出来;抽象工厂主要作用是创建产品族并让相关产品的创建过程集中。
优缺点
优点:
- 工厂封装了创建产品对象的过程,将客户与类的实现分离,客户通过它们的抽象接口操纵实例
- 易于交换产品系列,一个具体工厂类在一个应用中仅出现在它初始化的时候,这使得只需改变具体的工厂即可使用不同的产品配置,整个产品系列会立刻改变
缺点:
- 难以支持新种类的产品,支持新种类的产品需要扩展工厂接口 ,这将涉及 AbstractFactory类及其所 有子类的改变
适用场景
- 一个系统要独立于它的产品的创建、组合和表示时。 例如同步开发一个较复杂程序时,将各个组件用抽象工厂模式进行创建。
- 一个系统要由多个产品系列中的一个来配置时。例如开发一个支持多种不同样式切换的界面程序时。
- 强调一系列相关的产品对象的设计以便进行联合使用时。相关产品的创建通过同一个具体工厂类创建,控制了工厂类就控制了关联产品之间的组合关系。
- 提供一个产品类库,而只想显示它们的接口而不是实现时。不对外暴露具体的实现类,有利于后期修改。
相关模式
Abstract Factory类通常用工厂方法(Factory Method)实现, 但也可以用原型(Prototype)实现,一个具体的工厂通常是一个单例(Singleton)。