通過前面4篇設(shè)計(jì)模式的學(xué)習(xí),我們可以發(fā)現(xiàn)一個(gè)共同點(diǎn)就是,把具體類抽象,然后通過接口來指向?qū)ο髮?shí)例,像下面這樣
IInterface I = new ConcreteClass();
這樣的編寫風(fēng)格,我們確實(shí)是通過接口讓代碼變的更有彈性,但是,存在一個(gè)問題就是在應(yīng)用類中我們依然new了一另一個(gè)對(duì)象的實(shí)例,當(dāng)我們需要變更這個(gè)具體的對(duì)象類是,還是需要修改我們的應(yīng)用類。似乎并不是完全的對(duì)修改關(guān)閉。
今天我們來了解一個(gè)新的設(shè)計(jì)方法,這種設(shè)計(jì)方式可以讓我們把實(shí)例化具體類的代碼從應(yīng)用類中抽離出來。當(dāng)實(shí)體類需要更改時(shí),就不需要改動(dòng)我們的應(yīng)用類。
1:什么是簡(jiǎn)單工廠模式
定義:通過定義一個(gè)工廠類,來讓這個(gè)工廠類專門生產(chǎn)具體類實(shí)例,并且返回這個(gè)類的接口或父類
場(chǎng)景:我們每年都要過中秋節(jié),每次過節(jié)都會(huì)買各種口味的月餅,有伍仁味,牛肉,火腿等,月餅店就要按照訂單來生產(chǎn)相關(guān)的月餅
2:實(shí)現(xiàn)上述場(chǎng)景
1:我們先按照以前的代碼風(fēng)格來實(shí)現(xiàn)
分析:為了讓月餅店和月餅之間解耦,我們先定義一個(gè)月餅的接口(IMoonCake),讓具體的月餅實(shí)現(xiàn)這個(gè)接口 ,再定義一個(gè)月餅的類(MoonCakeStore)并讓其維護(hù)一個(gè)月餅的接口 。
第一步:建立月餅接口:
第二步:創(chuàng)建三種口味的,具體月餅

第三步: 創(chuàng)建月餅的零售店
在上面的實(shí)現(xiàn)上,似乎解了月餅和月餅店的之間的耦合,但是對(duì)于MoonCakeStore這個(gè)類并沒有滿足對(duì)修改關(guān)閉這個(gè)原則,因?yàn)楫?dāng)我們添加或者刪除一中口味的月餅時(shí)就需要去修改MoonCakeStore類中的switch代碼塊,
為了滿足“對(duì)修改關(guān)閉這個(gè)原則”,下面我們添加一個(gè)工廠專門用來生產(chǎn)月餅,把Switch這段代碼從Store中分離出來,以后添加或刪除月餅類型時(shí)就只需要修改Factory類。
2:建立一個(gè)簡(jiǎn)單的月餅工廠
第一步:建立工廠類
第二步:修改月餅的零售店類
通過第2種方式,我們就將月餅的實(shí)例化從應(yīng)用中抽離出來,
Factory:是用來生產(chǎn)月餅,也就是實(shí)例化具體類的功能
IMoonCake:月餅類的接口,使用接口返回,讓代碼更具有彈性
MoonCakeStore:工廠的客戶,通過工廠來取得具體的月餅實(shí)例,完成月餅的制作
通過這篇簡(jiǎn)單工廠的熱身讓我們對(duì)使用工廠這種編程習(xí)慣(把經(jīng)常發(fā)生變動(dòng)的部分抽離出來,單獨(dú)封裝)有一個(gè)簡(jiǎn)單的認(rèn)識(shí),下一篇我們來進(jìn)一步學(xué)習(xí)工廠模式之工廠方法模式