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__方法

