設計模式之工廠方法模式
工廠方法模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
產生:說到工廠模式,我想大家就能想到簡單工廠模式,由於在簡單工廠模式中當需要擴展功能時就需要修改原類,這違背了開放-封閉原則,而工廠方法模式則將類的實例化延遲到子類,避免了類的修改,下麵是兩種模式結構圖:
1、簡單工廠模式結構圖:
1) 工廠類角色(Creator):這是本模式的核心,含有一定的商業邏輯和判斷邏輯。
2) 抽象產品角色(Product):它一般是具體產品繼承的父類或者實現的接口。
3) 具體產品角色(ConcreteProduct):工廠類所創建的對象就是此角色的實例。
2、工廠方法模式結構圖:
1) 抽象工廠角色()Creator): 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。
2) 具體工廠角色(ConcreteCreator):它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
3) 抽象產品角色(Product):它是具體產品繼承的父類或者是實現的接口。
4) 具體產品角色(ConcreteProduct):具體工廠角色所創建的對象就是此角色的實例。
實例引用:
用一個大家比較熟知的故事來介紹工廠方法模式:女媧補天,
分析:首先對造人過程進行分析,該過程涉及三個對象:女媧、八卦爐、三種不同膚色的人,女媧可以使用場景類Client來表示,八卦爐類似於一個工廠,負責製造生產產品(即人類):三種不同膚色的人,他們都是同一個接口下的不同實現類,都是人嘛,隻是膚色、語言不同,對於八卦爐來說都是它生產出的產品。
解釋:類圖比較簡單,AbstractHumanFactory是一個抽象類,定義了一個八卦爐都具有的整體功能,HumanFactory為實現類,完成具體的任務:創建人類;Human接口是人類的總稱,其三個實現類分別為三類人種;NvWa類是一個場景類,負責模擬這個場景,執行相關的任務。
理解:結合例子,我們知道工廠方法實現時,客戶端需要決定實例化哪個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法模式把簡單工廠的內部邏輯判斷移到了客戶端代碼來進行,你想加功能,本來是改工廠類,而現在是改客戶端。
結合之前對工廠模式的介紹,這個例子就自然而然很清楚啦!
最後更新:2017-04-03 12:55:04