保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單執行緒static 或者getinstance方法,多執行緒加鎖。
通過乙個factory物件,建立各種物件,靈活性差。
比如建立乙個房屋物件,可能存在各種風格房屋的情況下,可以對房屋進行抽象。主要用來應對新系列的需求變動。
如果不存在」多系列物件建立「的需求變化,則沒必要應用抽象模式,靜態工廠方法足矣。
主要用於隔離類物件的使用者和具體型別之間的耦合關係。通過介面、抽象類實現。
主要用於「分步驟構建乙個複雜的物件」。在這其中「分步驟」是乙個穩定的演算法,而複雜物件的各個部分則經常變化。複雜構建過程封裝為builder,作為引數傳給「分步驟」演算法,由演算法按步驟呼叫builder的具體介面。
依賴關係倒置, 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
原型模式同樣用於隔離類物件的使用者和具體型別(易變類)之間的耦合關係,它同樣要求這些「易變類」擁有「穩定的介面」。
必須儲存乙個物件某乙個時刻的(部分)狀態,這樣以後需要時它才能恢復到先前的狀態。建立乙個狀態恢復介面,接收狀態物件並還原狀態。
對變化的演算法進行抽象,並將物件作為引數傳給統一的介面,比如各種排序演算法可以抽象為多個排序策略。
模式的應用場合在於「乙個請求可能有多個接受者,但是最後真正的接受者只有乙個」,只有這時候請求傳送者與接受者的耦合才胡可能出現「變化脆弱」的症狀,職責鏈的目的就是將二者解耦,從而更好地應對變化。如果請求傳遞到職責鏈的未尾仍得不到處理,應該有乙個合理的預設機制。這也是每乙個接受物件的責任,而不是發出請求的物件的責任。
下乙個處理步驟物件,是通過引數傳入的,而不是請求物件自己指定的。
用乙個中介物件來封裝一系列物件互動。中介者使各物件不需要相互引用,從而使其耦合松。散,而且可以獨立地改變它們之間的互動。
將多個物件間複雜的關聯關係解耦, mediator 模式將多個物件間的控制邏輯進行集中管理,變「多個物件互相關係」為多「個物件和乙個中介者關聯」,簡化了系統的維護,抵禦了可能的變化。
例如,聊天室物件,統一排程所有聊天者的相互資訊傳送,聊天者物件之間不直接通訊。
允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。
state 模式將所有乙個特定狀態相關的行為都放入乙個 state 的子類物件中,在物件狀態切換時,切換相應的物件;但同時維持 state 的介面,這樣實現了具體操作與狀態轉換之間的解耦。
在軟體系統中,「行為請求者」與「行為實現者」通常呈現一種「緊耦合」。但在某些場合,比如要對行為進行「記錄、撤銷/重做、事務」等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將「行為請求者」與「行為實現者」解耦?將一組行為抽象為物件,可以實現二者之間的松耦合。
對不同的命令進行統一抽象,由啟用器進行不同命令的統一介面呼叫。
乙個方法的執行步驟是統一的,將各個步驟作為抽象方法,由子類覆寫。
將乙個類的介面轉換成客戶希望的另外乙個介面。 adapter 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
為子系統中的一組介面提供乙個一致的介面, facade 模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。
例如,業務層是將複雜資料訪問邏輯進行封裝後,給ui呼叫,減少前端**複雜度。
物件導向很好地解決了系統抽象性的問題,同時在大多數情況下,也不會損及系統的效能。但是,在某些特殊的應用中下,由於物件的數量太大,採用物件導向會給系統帶來難以承受的記憶體開銷。比如:圖形應用中的圖元等物件、字處理應用中的字元物件等。
字元可以通過享元模式,在記憶體中只建立一次物件,減少系統開銷。
動態地給乙個物件新增一些額外的職責。就增加功能來說, decorator 模式相比生成子類更為靈活。通過採用組合、而非繼承的手法, decorator 模式實現了在執行時動態地擴充套件物件功能的能力,而且可以根據需要擴充套件多個功能。避免了單獨使用繼承帶來的「靈活性差"和"多子類衍生問題"。
語法解析場景
將實現統一介面的一系列物件新增到列表中,並由組合物件迴圈呼叫各個物件的統一介面。
設計模式學習筆記
1.簡單工廠模式 2.策略模式 3.單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因 4.開放 封閉原則 就是對軟體實體 類,模組,函式等 應該可以擴充套件,但是不可以修改,無論模組是多麼的 封閉 都會存在一些無法對之的封閉的變化。既然不可能完全封閉,設計人員就必須對他設計的模組應該對哪種變...
設計模式學習筆記
1.單例模式 限制只產生乙個物件。if object null 2.簡單工廠模式 通過乙個工廠類根據條件來建立各種各樣的類。3.工廠方法模式 對工廠類進行改造分解,工廠類公升級為介面,一對一建立工廠類 針對要生產的類 實現工廠介面。問題來了 簡單工廠和工廠方法有什麼優劣?4.迭代器模式 iterat...
設計模式學習筆記
策略模式 用於情景 鴨子行為,鴨子型別可以繼承,鴨子行為變成介面,各種各樣的行為去實現介面,然後在具體類中呼叫行為介面具體實現子類。遊戲玩家 變換。觀察者模式 用於場景 主題 觀察者 天氣預報資料展示,當氣象站收集到新的資料時,像各個面板推送最新的資料,面板顯示最新資料。裝飾者模式 用於場景 飲料加...