工廠模式

1 ?設(shè)計模式

設(shè)計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長的一段時間的試驗和錯誤總結(jié)出來的。

1.1設(shè)計模式六大原則

1.設(shè)計模式六大原則(1):單一職責(zé)原則

即一個類只負(fù)責(zé)一項職責(zé)

2.設(shè)計模式六大原則(2):里氏替換原則

所有引用基類的地方必須能透明地使用其子類的對象

3.設(shè)計模式六大原則(3):依賴倒置原則

高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。

4.設(shè)計模式六大原則(4):接口隔離原則

客戶端不應(yīng)該依賴它不需要的接口;一個類對另一個類的依賴應(yīng)該建立在最小的接口上。

5.設(shè)計模式六大原則(5):迪米特法則

一個對象應(yīng)該對其他對象保持最少的了解。盡量降低類與類之間的耦合。

6.設(shè)計模式六大原則(6):開閉原則

一個軟件實體如類、模塊和函數(shù)應(yīng)該對擴展開放,對修改關(guān)閉。

1.2工廠設(shè)計模式

設(shè)計一個賣車的4S店,該怎樣做呢?


說明

上面的4s店,只能銷售那一種類型的車

如果這個是個銷售北京現(xiàn)代品牌的車,比如伊蘭特、索納塔等,該怎樣做呢?




使用函數(shù)


使用類來實現(xiàn)




總結(jié):

在創(chuàng)建對象比較簡單的時候,我們直接在主方法中做了,但是很多時候,創(chuàng)建對象需要一些初始化的操作,或者業(yè)務(wù)邏輯的處理。也就是說,有時候創(chuàng)建一個對象會做比較復(fù)雜的操作,這個時候,如果所有對象的創(chuàng)建操作都放在主方法中,就不合適了,怎么解決呢?使用簡單工廠模式

先來看看它的組成:

1.工廠類角色:這是本模式的核心,含有一定的商業(yè)邏輯和判斷邏輯,用來創(chuàng)建產(chǎn)品

2.抽象產(chǎn)品角色:它一般是具體產(chǎn)品繼承的父類或者實現(xiàn)的接口。

3.具體產(chǎn)品角色:工廠類所創(chuàng)建的對象就是此角色的實例。

簡單工廠的優(yōu)點和缺點

對象創(chuàng)建比較復(fù)雜的時候,可以考慮使用簡單工廠

1.優(yōu)點:

在簡單工廠中主函數(shù)或者客戶端不再負(fù)責(zé)對象的創(chuàng)建,而是把這個責(zé)任交給工廠類,主函數(shù)或者客戶端在使用對象的時候只從工廠中調(diào)用就行了,從而明確了各個類的職責(zé),符合單一職責(zé)原則)

2.缺點

由于這個工廠類負(fù)責(zé)所有對象的創(chuàng)建,那么當(dāng)子類增多時,我們就需要去修改工廠類的代碼,這樣呢,就違反了一個原則:開閉原則

那怎么辦?

可以使用工廠方法模式

工廠方法模式組成:

1.抽象工廠角色:這是工廠方法模式的核心,它與應(yīng)用程序無關(guān)。是具體工廠角色必須實現(xiàn)的接口或者必須繼承的父類。

2.具體工廠角色:它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼。由應(yīng)用程序調(diào)用以創(chuàng)建對應(yīng)的具體產(chǎn)品的對象。

3.抽象產(chǎn)品角色:它是具體產(chǎn)品繼承的父類或者是實現(xiàn)的接口。

4.具體產(chǎn)品角色:具體工廠角色所創(chuàng)建的對象就是此角色的實例。

工廠方法模式的優(yōu)點和缺點

3.優(yōu)點:

解決了簡單工廠模式的違反開閉原則

4.缺點

如果需要增加一個具體產(chǎn)品類角色,需要添加這個類和對應(yīng)的工廠類。代碼量大。

2 ? __new__的使用

總結(jié)

·__new__至少要有一個參數(shù)cls,代表要實例化的類,此參數(shù)在實例化時由Python解釋器自動提供

·__new__必須要有返回值,返回實例化出來的實例,這點在自己實現(xiàn)__new__時要特別注意,可以return父類__new__出來的實例,或者直接是object的__new__出來的實例

·__init__有一個參數(shù)self,就是這個__new__返回的實例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動作,__init__不需要返回值

·我們可以將類比作制造商,__new__方法就是前期的原材料購買環(huán)節(jié),__init__方法就是在有原材料的基礎(chǔ)上,加工,初始化商品環(huán)節(jié)


1.2 單例設(shè)計模式

單例是什么?

舉個常見的單例模式例子,我們?nèi)粘J褂玫碾娔X上都有一個回收站,在整個操作系統(tǒng)中,回收站只能有一個實例,整個系統(tǒng)都使用這個唯一的實例,而且回收站自行提供自己的實例。因此回收站是單例模式的應(yīng)用。

確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例,這個類稱為單例類,單例模式是一種對象創(chuàng)建型模式。

創(chuàng)建單例-保證只有1個對象


創(chuàng)建單例時,只執(zhí)行1次__init__方法



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

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

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