經典軟體設計模式,用小學生能懂的方式解釋
讓演算法可以在執行時切換,不用改原本的程式碼
確保一個類別只有一個實例,並提供全域存取點
定義建立物件的介面,讓子類別決定要建立哪種物件
提供介面來建立一系列相關的物件,不需指定具體類別
將複雜物件的建構過程分離,讓相同的建構過程可以建立不同的表示
透過複製現有物件來建立新物件,而非從頭建立
將一個類別的介面轉換成客戶端期望的另一種介面
將抽象與實作分離,讓兩者可以獨立變化
將物件組合成樹狀結構,讓客戶端可以一致地處理個別物件和組合
動態地為物件附加額外的責任,比繼承更靈活
為子系統中的一組介面提供一個統一的高層介面
運用共享技術有效地支援大量細粒度的物件
為另一個物件提供一個替代品或佔位符,以控制對它的存取
定義物件間的一對多依賴,當一個物件狀態改變時自動通知所有依賴者
將請求封裝為物件,讓你可以用不同的請求來參數化客戶端
在父類別中定義演算法的骨架,將某些步驟延遲到子類別實作
提供一種方法循序存取集合中的元素,而不需要暴露其底層表示
讓物件在內部狀態改變時改變它的行為,看起來像是改變了類別
定義一個物件來封裝一組物件之間的互動方式
讓多個物件都有機會處理請求,將處理者串成一條鏈
將演算法與物件結構分離,讓你可以在不修改物件的情況下定義新操作
在不破壞封裝的前提下,捕獲並外部化物件的內部狀態以便之後恢復
為語言定義文法表示,並定義一個解釋器來處理這個文法