中介者模式(Mediator)
意圖:用一個中介對象來封裝一系列的對象交互三痰,中介者使各對象不需要顯式地相互引用吧寺,從而使其耦合松散窜管,而且可以獨(dú)立地改變它們之間的交互。
主要解決:對象與對象之間存在大量的關(guān)聯(lián)關(guān)系稚机,這樣勢必會導(dǎo)致系統(tǒng)的結(jié)構(gòu)變得很復(fù)雜微峰,同時若一個對象發(fā)生改變,我們也需要跟蹤與之相關(guān)聯(lián)的對象抒钱,同時做出相應(yīng)的處理蜓肆。
命令模式(Command)
意圖:將一個請求封裝成一個對象,從而使得行為請求者和行為實(shí)現(xiàn)者解耦合谋币。
主要解決:在軟件系統(tǒng)中仗扬,行為請求者與行為實(shí)現(xiàn)者通常是一種緊耦合的關(guān)系,但某些場合蕾额,比如需要對行為進(jìn)行記錄早芭、撤銷或重做、事務(wù)等處理時诅蝶,這種無法抵御變化的緊耦合的設(shè)計就不太合適退个。
備忘錄模式(Memento)
意圖:在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài)调炬,并在該對象之外保存這個狀態(tài)语盈。
主要解決:所謂備忘錄模式就是在不破壞封裝的前提下,捕獲一個對象的內(nèi)部狀態(tài)缰泡,并在該對象之外保存這個狀態(tài)刀荒,這樣可以在以后將對象恢復(fù)到原先保存的狀態(tài)。
模板方法模式(Template)
意圖:定義一個操作中的算法的骨架棘钞,而將一些步驟延遲到子類中缠借。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
主要解決:一些方法通用宜猜,卻在每一個子類都重新寫了這一方法泼返。
狀態(tài)模式(State)
意圖:將特定狀態(tài)相關(guān)的邏輯分散到一些類的狀態(tài)類中
主要解決:對象的行為依賴于它的狀態(tài)(屬性),并且可以根據(jù)它的狀態(tài)改變而改變它的相關(guān)行為姨拥。
策略模式(Strategy)
意圖:定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換绅喉。
主要解決:在有多種算法相似的情況下,使用 if...else 所帶來的復(fù)雜和難以維護(hù)垫毙。
觀察者模式(Observer)
意圖:定義對象間的一種一對多的依賴關(guān)系霹疫,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新综芥。
主要解決:一個對象狀態(tài)改變給其他對象通知的問題,而且要考慮到易用和低耦合猎拨,保證高度的協(xié)作膀藐。
解釋器模式(Interpreter )
意圖:給定一個語言屠阻,定義它的文法表示,并定義一個解釋器额各,這個解釋器使用該標(biāo)識來解釋語言中的句子国觉。
主要解決:對于一些固定文法構(gòu)建一個解釋句子的解釋器。
訪問者模式(Visitor)
意圖:主要將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)訪問操作分離虾啦。
主要解決:穩(wěn)定的數(shù)據(jù)結(jié)構(gòu)和易變的訪問操作耦合問題麻诀。
責(zé)任鏈模式(Chain of Responsibility)
意圖:避免請求發(fā)送者與接收者耦合在一起,讓多個對象都有可能接收請求傲醉,將這些對象連接成一條鏈蝇闭,并且沿著這條鏈傳遞請求,直到有對象處理它為止硬毕。
主要解決:職責(zé)鏈上的處理者負(fù)責(zé)處理請求呻引,客戶只需要將請求發(fā)送到職責(zé)鏈上即可,無須關(guān)心請求的處理細(xì)節(jié)和請求的傳遞吐咳,所以職責(zé)鏈將請求的發(fā)送者和請求的處理者解耦了逻悠。
迭代器模式(Iterator)
意圖:提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內(nèi)部表示。
主要解決:不同的方式來遍歷整個整合對象韭脊。