- 一、角色
- 抽象工厂(Abstract Factory)角色:所有具体工厂类的接口
- 具体工厂(Concrete Factory)角色 :实现抽象工厂接口的具体工厂类
- 抽象产品(AbstractProduct)角色 :所有被创建实例的公共接口
- 具体产品(Concrete Product)角色 :创建的具体实例对象,具体产品由具体的工厂创建
- 二、适用场景
- 和工厂方法一样客户端不需要知道它所创建的对象的类
- 需要一组对象共同完成某种功能时,并且可能存在多组对象完成不同功能的情况。(同属于同一个产品族的产品)
- 系统结构稳定,不会频繁的增加对象。(因为一旦增加就需要修改原有代码,不符合开闭原则)
- 三、实例
- 图-1中的Factory是抽象工厂角色,AK_Factory、M4A1_Factory是具体工厂角色,与工厂方法模式不同的是它对应多个具体产品类,例如AK_Factory依赖具体产品类AK、AK_Bullet,虽然这两个类从代码上是没有任何关联,但是从语义上来说他们属于同一个产品族群的产品
- 代码地址:https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/patterns/abstractfactory
图-1