Abstract Factory 抽象工厂模式 及几种工厂模式的对比
[TOC]
创建型设计模式
又名 Kit Factory
简介
- 抽象工厂的比较难以理解,需要引入两个产品分类型的定义。产品族、产品类,一般先分族,再分类。
产品族
如宝马车,奔驰车
如Mysql族,mongodb族
如中国人,美国人
产品类
如suv类,轿车类
如user类,department类
如好人,坏人
- 抽象工厂模式是工厂方法模式的进化,当Concrete Product是不同产品族内产品的时候。Abstract Product 由Factory Method 的一个变成多个。
- 一个ConcreteFactory生产不同种类的Product,每一类Concrete Product拥有共同的Abstract Product。
四种角色:Factory、Concrete Factory 、Product、Concrete Product
角色 | 个数 |
---|---|
Factory:抽象工厂 | 一个 |
Concrete Factory 具体工厂 | 多个 |
Product: 抽象产品 | 多个 |
Concrete Product:具体产品 | 多个 |
类图
优点
* 增加新的产品族很方便,无需修改已有系统,这种情况符合开闭原则。
* 抽象类的使用替代了具体类,符合依赖倒转原则。
缺点
* 开闭原则的破坏(增加新的工厂和产品族容易,增加新的产品等级结构的情况下破坏了开闭原则)
应用 生产奔驰宝马的suv和轿车 不同数据库的使用
- 生产奔驰宝马的suv和轿车
- Product 多个,一族产品的集合抽象定义(如宝马车族,奔驰车族)
- Concrete Product 宝马suv,奔驰suv,宝马car,奔驰car.
- Factory 定义了具体工厂(SUV Factory,Car Factory)的抽象接口。
- Concrete Factory 是生产一类产品的工厂,如 SUV Factory,Car Factory.
- 《大话设计模式》 中举例:不同数据库的使用
- Product 多个,一族产品的集合抽象定义(如宝马车族,奔驰车族)
- Concrete Product MysqlUser,MysqlDepartment,MongodbUser,MongodbDepartment.
- Factory 定义了具体工厂(User Factory,Department Factory)的抽象接口
- Concrete Factory 是生产一类产品的工厂,如 User Factory,Department Factory.
- 自己项目举例:
//todo