1.3 creational 創(chuàng)建型 - abstract factory 抽象工廠模式

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容