小白的設(shè)計(jì)模式之旅(工廠模式之簡(jiǎn)單工廠)

通過前面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í)工廠模式之工廠方法模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容