Python設(shè)計模式
常見開發(fā)設(shè)計模式
即針對軟件設(shè)計中普遍存在或者反復(fù)出現(xiàn)的問題所提出的解決方案。
接口
接口即若干抽象方法的集合。
接口限制了實現(xiàn)接口的類必須按照接口給定的調(diào)用方式實現(xiàn)這些方法,對高層模塊隱藏了類的內(nèi)部實現(xiàn)。
SOLID原則
開放封閉原則
一個軟件實體,如類、模塊和函數(shù)應(yīng)該對擴展開放,對修改關(guān)閉。即軟件實體應(yīng)盡量在不修改原有代碼的情況下進(jìn)行擴展。
里氏替換原則
所有引用父類的地方必須能透明地使用其子類的對象。
依賴倒置原則
高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。應(yīng)該針對接口編程,而不是針對實現(xiàn)編程。
接口隔離原則
使用多個專門的接口,而不使用單一的總接口,即客戶端不應(yīng)該依賴那些它不需要的接口。
單一職責(zé)原則
不要存在多于一個導(dǎo)致類變更的原因,通俗的說,一個類只負(fù)責(zé)一項職責(zé)。
設(shè)計模式分類
創(chuàng)建型模式
工廠方法模式、抽象工廠模式、創(chuàng)建者模式、原型模式、單例模式
結(jié)構(gòu)型模式
適配器模式、橋模式、組合模式、裝飾模式、外觀模式、享元模式、代理模式
行為型模式
解釋器模式、責(zé)任鏈模式、命令模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態(tài)模式、策略模式、訪問者模式、模板方法模式
創(chuàng)建型模式
簡單工廠模式
使用獨立的工廠類生產(chǎn)產(chǎn)品類的對象。
優(yōu)點:隱藏了對象創(chuàng)建的實現(xiàn)細(xì)節(jié);客戶端不需要修改代碼
缺點:違反了單一職責(zé)原則,整合了多種創(chuàng)建邏輯;產(chǎn)品類增加需要修改工廠類代碼,違反開閉原則
工廠方法
實例 -> 類 -> 類工廠
抽象工廠
簡單來說就是把一些具有相同方法的類再進(jìn)行封裝,抽象共同的方法以供調(diào)用.是工廠方法的進(jìn)階版本.
實例 -> 類 -> 類工廠 -> 抽象工廠
惰性初始化 Lazy evaluation
這個Python里可以使用@property實現(xiàn),就是當(dāng)調(diào)用的時候才生成.
生成器 Builder

Builder模式主要用于構(gòu)建一個復(fù)雜的對象,但這個對象構(gòu)建的算法是穩(wěn)定的,對象中的各個部分經(jīng)常變化。Builder模式主要在于應(yīng)對復(fù)雜對象各個部分的頻繁需求變動。但是難以應(yīng)對算法的需求變動。這點一定要注意,如果用錯了,會帶來很多不必要的麻煩。
重點是將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對象。
簡單的說:子對象變化較頻繁,對算法相對穩(wěn)定。
單例模式 Singleton
一個類只有一個實例
原型模式
特點是通過復(fù)制一個已經(jīng)存在的實例來返回新的實例,而不是新建實例.
多用于創(chuàng)建復(fù)雜的或者耗時的實例,因為這種情況下,復(fù)制一個已經(jīng)存在的實例使程序運行更高效;或者創(chuàng)建值相等,只是命名不一樣的同類數(shù)據(jù).
對象池 Object pool
一個對象池是一組已經(jīng)初始化過且可以使用的對象,而可以不用在有需求時創(chuàng)建和銷毀對象。池的用戶可以從池子中取得對象,對其進(jìn)行操作處理,并在不需要時歸還給池子而非銷毀 而不是銷毀它.
在Python內(nèi)部實現(xiàn)了對象池技術(shù).例如像小整型這樣的數(shù)據(jù)引用非常多,創(chuàng)建銷毀都會消耗時間,所以保存在對象池里,減少開銷.
結(jié)構(gòu)型模式
修飾模型 Decorator
Python里就是裝飾器.
代理模式 Proxy
例如Python里的引用計數(shù).
行為型模式
迭代器
迭代容器里所有的元素.
浙公網(wǎng)安備 33010602011771號