開發過程中經常聽到工廠這個詞,其實根據個人經驗,簡單工廠用的是比較多的。工廠方法和抽象工廠是GoF23種設計模式中的一種,而我們常使用的簡單工廠並不是一種設計模式,可以說是我們自己的一種俗稱。
定義
簡單工廠: 直接通過一個Factory類創建多個實體類的構造方式。
工廠方法: 一個抽象產品類,可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠:個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類可以創建多個具體產品類的實例。
工廠方法與抽象工廠區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。 工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
模板
簡單工廠
工廠方法
- AbstractProduct : 抽象產品 (在工廠方法模式中只有一個AbstractProduct)
- ConcreteProductXXX : 具體的產品類
- AbstractFactory: 抽象工廠類
- ConcreteFactory: 具體工廠類(每個工廠只能創建一個具體產品)
抽象工廠
- ProductX : 產品接口(抽象工廠中可以有多個產品抽象類)
- ConcreteProductX : 具體產品
- Creator: 抽象工廠類(也可以叫Factory,定義了創建多個產品種類的的接口)
- ConcreateCreateX: 具體工廠
實例
優點
- 將對象的構造與獲取隔離
- 面向接口編程,可以動態增加Product/Factory,而且方便單元測試
- 一般還可以在工廠中統一維護一個單例(單例模式、靜態方法)
- 廣義上講其實工廠模式也是一種外觀模式,屏蔽了具體的創建過程。
缺點
- 增加了多個類/接口,增加了系統的復雜性