通過前面4篇設計模式的學習,我們可以發(fā)現(xiàn)一個共同點就是,把具體類抽象,然后通過接口來指向對象實例,像下面這樣
IInterface I = new ConcreteClass();
這樣的編寫風格央勒,我們確實是通過接口讓代碼變的更有彈性,但是澳化,存在一個問題就是在應用類中我們依然new了一另一個對象的實例崔步,當我們需要變更這個具體的對象類是,還是需要修改我們的應用類缎谷。似乎并不是完全的對修改關閉井濒。
今天我們來了解一個新的設計方法,這種設計方式可以讓我們把實例化具體類的代碼從應用類中抽離出來列林。當實體類需要更改時瑞你,就不需要改動我們的應用類。
1:什么是簡單工廠模式
定義:通過定義一個工廠類希痴,來讓這個工廠類專門生產(chǎn)具體類實例者甲,并且返回這個類的接口或父類
場景:我們每年都要過中秋節(jié),每次過節(jié)都會買各種口味的月餅砌创,有伍仁味虏缸,牛肉,火腿等嫩实,月餅店就要按照訂單來生產(chǎn)相關的月餅
2:實現(xiàn)上述場景
1:我們先按照以前的代碼風格來實現(xiàn)
分析:為了讓月餅店和月餅之間解耦刽辙,我們先定義一個月餅的接口(IMoonCake),讓具體的月餅實現(xiàn)這個接口 ,再定義一個月餅的類(MoonCakeStore)并讓其維護一個月餅的接口 甲献。
第一步:建立月餅接口:
第二步:創(chuàng)建三種口味的宰缤,具體月餅
第三步: 創(chuàng)建月餅的零售店
在上面的實現(xiàn)上,似乎解了月餅和月餅店的之間的耦合竟纳,但是對于MoonCakeStore這個類并沒有滿足對修改關閉這個原則撵溃,因為當我們添加或者刪除一中口味的月餅時就需要去修改MoonCakeStore類中的switch代碼塊,
為了滿足“對修改關閉這個原則”锥累,下面我們添加一個工廠專門用來生產(chǎn)月餅缘挑,把Switch這段代碼從Store中分離出來,以后添加或刪除月餅類型時就只需要修改Factory類桶略。
2:建立一個簡單的月餅工廠
第一步:建立工廠類
第二步:修改月餅的零售店類
通過第2種方式语淘,我們就將月餅的實例化從應用中抽離出來诲宇,
Factory:是用來生產(chǎn)月餅,也就是實例化具體類的功能
IMoonCake:月餅類的接口惶翻,使用接口返回姑蓝,讓代碼更具有彈性
MoonCakeStore:工廠的客戶搀罢,通過工廠來取得具體的月餅實例依溯,完成月餅的制作
通過這篇簡單工廠的熱身讓我們對使用工廠這種編程習慣(把經(jīng)常發(fā)生變動的部分抽離出來辙芍,單獨封裝)有一個簡單的認識拌倍,下一篇我們來進一步學習工廠模式之工廠方法模式