定義 : 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工程方法使一個類的實例化延遲到其子類
類圖
通用代碼
優缺點
1. 良好的封裝性,代碼結構清晰。調用者只需知道產品類名,不必知道創建對的過程,降低了模塊間的耦合
2. 擴展性優秀。在新增產品的情況下,適當修改具體工廠類或擴展一個工廠類即可
3. 屏蔽產品類。產品類的實現如何變化,調用者無需關心,它只關心接口
4. 典型的解耦框架。符合迪米特法則,我不需要的不要去交流;符合依賴倒置原則,只依賴產品類的抽象;符合里氏替換原則,使用產品子類替換產品父類
使用場景
1. 需要生成對象的地方
2. 需要靈活,可擴展的框架時(如POP3,IMAP,HTTP——>IConnecTMail)
3. 可以使用在異構環境中
4. 可以使用在測試驅動開發的框架下
擴展
簡單工廠模式:將原來的抽象工廠中的創建方法改成靜態方法
注意事項
工廠方法模式最好是與其他模式(如模板方法模式,單例模式,原型模式等)混合,如此可以變化出無窮的設計