最近在看設(shè)計模式。簡單的對二十三種設(shè)計模式匯總一下搏予。持續(xù)更新中ing.....
一.單例模式:
定義
確保某一個類只有一個實例熊锭,而且自行實例化向整個系統(tǒng)提供這個實例。
使用場景
創(chuàng)建一個對象需要消耗的資源過多雪侥,如需要訪問IO和數(shù)據(jù)庫等資源碗殷,這時就要考慮使用單例模式。
二.Builder模式
定義:
將復(fù)雜對象的構(gòu)建與它的表示分離速缨,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
使用場景:
a相同的方法锌妻,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)構(gòu)
b多個部件或者零件旬牲,都可以裝配到一個對象中仿粹,但是產(chǎn)生的運行結(jié)果又不同時
c產(chǎn)品類非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的作用原茅,這個時候使用建造者模式非常合適
d當初始化一個對象特別復(fù)雜吭历,如參數(shù)多,且很多參數(shù)都有默認值時
三.原型模式
定義
用原型實例指定創(chuàng)建對象的種類擂橘,并通過復(fù)制這些原型創(chuàng)建新的對象
使用場景
a類初始化需要消耗非常多的資源晌区,這個資源包含數(shù)據(jù),硬件資源等通贞,通過原型復(fù)制避免這些消耗
b通過new產(chǎn)生一個對象需要非常繁瑣的數(shù)據(jù)準備或者訪問權(quán)限朗若,這時可以使用原型模式
c一個對象需要提供給齊對象訪問,而且各個調(diào)用者都可能需要修改其值時昌罩,可以考慮使用原型模式復(fù)制多個使用對象共調(diào)用者使用哭懈,即保護性拷貝
四.工廠方法模式
定義
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪個類
使用場景
在任何要生成復(fù)雜對象的地方茎用,都可以使用工廠方法模式遣总。復(fù)雜對象適合使用工廠模式你虹,用new就可以完成創(chuàng)建的對象無需使用工廠模式。
五.抽象工廠模式
定義
為創(chuàng)建一組相關(guān)或者是相互依賴的對象提供一個接口彤避,而不需要指定它們的具體類傅物。
使用場景
一個對象族有相同的約束時可以使用抽象工廠模式
六.策略模式
定義
策略模式定義了一系列的算法,并將每個算法封裝起來琉预,而且使他們可以互相替換董饰。策略模式讓算法獨立于使用它的客戶而獨立變化。
使用場景
a針對同一類型問題的多種處理方式圆米,僅僅是具體行為有差別時卒暂。
b需要安全地封裝多種同一類型的操作時。
c出現(xiàn)同一抽象類有多個子類娄帖,而又需要使用if-else或者switch-case來選擇具體子類使也祠。
七.狀態(tài)模式
定義
當一個對象的內(nèi)在狀態(tài)改變時允許改變其行為,這個對象看起來像是改變了類近速。
使用場景
a一個對象的行為取決于它的狀態(tài)诈嘿,并且它必須在運行時根據(jù)狀態(tài)改變它的行為。
b代碼中包含大量與對象有關(guān)的條件語句削葱,例如奖亚,一個操作中含有龐大的多分支語句,且這些分支依賴于改對象的狀態(tài)析砸。
八.責任鏈模式
定義
使多個對象都有機會處理請求昔字,從而避免請求的發(fā)送者和接受者之間的耦合關(guān)系。將這些對象鏈成一條鏈首繁,并沿著這條鏈傳遞請求作郭,直到有對象處理他們。
使用場景
a多個對象處理同一請求弦疮,但具體由哪個對象處理則在運行時動態(tài)決定夹攒。
b在請求處理者不明確的情況下向多個對象中的一個提交請求。
c需要動態(tài)指定一組對象處理請求挂捅。
九.解釋器模式
定義
給定一個語言芹助,定義它的文法的一種表示,并定義一個解釋器闲先,該解釋器使用該表示解釋語言中的句子。
使用場景
a如果某個簡單的語言需要解釋執(zhí)行而且將該語言中的語句表示為一個抽象語法樹時无蜂,可以考慮使用解釋器模式
b在特定的領(lǐng)域出現(xiàn)不斷重復(fù)的問題時伺糠,可以將該領(lǐng)域的問題轉(zhuǎn)化為一種語法規(guī)則下的語句,然后構(gòu)建解釋器來解釋該語句