Abstract Factory 抽象工廠模式 及幾種工廠模式的對比
[TOC]
創(chuàng)建型設計模式
又名 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
角色 | 個數(shù) |
---|---|
Factory:抽象工廠 | 一個 |
Concrete Factory 具體工廠 | 多個 |
Product: 抽象產品 | 多個 |
Concrete Product:具體產品 | 多個 |
類圖
AbstractFactory.png
優(yōu)點
* 增加新的產品族很方便,無需修改已有系統(tǒng),這種情況符合開閉原則。
* 抽象類的使用替代了具體類,符合依賴倒轉原則。
缺點
* 開閉原則的破壞(增加新的工廠和產品族容易,增加新的產品等級結構的情況下破壞了開閉原則)
應用 生產奔馳寶馬的suv和轎車 不同數(shù)據(jù)庫的使用
- 生產奔馳寶馬的suv和轎車
- Product 多個,一族產品的集合抽象定義(如寶馬車族,奔馳車族)
- Concrete Product 寶馬suv,奔馳suv,寶馬car,奔馳car.
- Factory 定義了具體工廠(SUV Factory,Car Factory)的抽象接口。
- Concrete Factory 是生產一類產品的工廠,如 SUV Factory,Car Factory.
- 《大話設計模式》 中舉例:不同數(shù)據(jù)庫的使用
- Product 多個,一族產品的集合抽象定義(如寶馬車族,奔馳車族)
- Concrete Product MysqlUser,MysqlDepartment,MongodbUser,MongodbDepartment.
- Factory 定義了具體工廠(User Factory,Department Factory)的抽象接口
- Concrete Factory 是生產一類產品的工廠,如 User Factory,Department Factory.
- 自己項目舉例:
//todo