設計模式的世界豐富多彩,比如生產乙個個「產品」的工廠模式,銜接兩個不相關介面的介面卡模式,用不同的方式做同一件事的策略模式,構建步驟穩定、根據構建過程的不同配置構建出不同物件的建造者模式等。
物件導向結合設計模式,才能真正體會到程式變得可維護、可復用、可擴充套件、靈活性好。設計模式對於程式設計師而言並不陌生,每個程式設計師在程式設計時都會或多或少地接觸到設計模式。無論是在大型程式的架構中,亦或是在原始碼的學習中,設計模式都扮演著非常重要的角色。
所有的設計模式都是為了程式能更好的滿足這六大原則。設計模式一共有 23 種
建立型模式
建立型模式的主要關注點是「怎樣建立物件?」,它的主要特點是「將物件的建立與使用分離」。這樣可以降低系統的耦合度,使用者不需要關注物件的建立細節,物件的建立由相關的工廠來完成。就像我們去商場購買商品時,不需要知道商品是怎麼生產出來一樣,因為它們由專門的廠商生產。
結構型模式描述如何將類或物件按某種布局組成更大的結構。它分為類結構型模式和物件結構型模式,前者採用繼承機制來組織介面和類,後者釆用組合或聚合來組合物件。
由於組合關係或聚合關係比繼承關係耦合度低,滿足「合成復用原則」,所以物件結構型模式比類結構型模式具有更大的靈活性。
就設計目的而言,多例模式就如單例一樣,純粹是為了控制例項數量,使用這種模式的類,通常是作為程式某個模組的入口。
享元和物件池的設計目的相近,主要是為了節省系統資源,它們維護和共享的通常是某種資源。
享元模式是結構型模式。這意味著,它的側重點是物件之間的銜接。它把動態的、會變化的狀態剝離,外部化,共享不變的東西。但是這部分外部化的東西和享元模式內部共享的不會變的東西之間存在關聯。所以享元對外提供的介面常常會包含乙個string型別的引數,表示key、名稱之類。
而物件池是構造型模式,側重於提供物件例項。對呼叫者而言物件池提供的物件都沒有區別,這個可以用,那個也可以用。
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。
行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低,滿足「合成復用原則」,所以物件行為模式比類行為模式具有更大的靈活性。
設計模式在面試中的考點通常是介紹其原理並說出優缺點。或者對比幾個比較相似的模式的異同點。在筆試中可能會出現畫出某個設計模式的 uml 圖這樣的題。雖說面試中佔的比重不大,但並不代表它不重要。恰恰相反,設計模式於程式設計師而言相當重要,它是我們寫出優秀程式的保障。設計模式與程式設計師的架構能力與閱讀原始碼的能力息息相關,非常值得我們深入學習。
設計模式基本原則
設計模式基本原則 開 閉 原則 open closed principle,或者ocp 原文 software entities should be open for extension,but closed for modification.解釋 乙個軟體實體應當對擴充套件開放,對修改關閉。黎克特...
設計模式基本原則
1 單一職責原則 類的職責要單一 不要將太多的職責放到同乙個類當中去。eg 資料結構職責類和演算法行為都放在乙個類。我們應該把資料結構和行為分開。2 開閉原則 乙個軟體實體應該對擴充套件開放,對修改關閉。可變性封裝 3 黎克特制代換原則 可以接受基類物件的地方必然要可以接受子類的物件。4 依賴倒轉原...
設計模式基本原則
設計模式基本原則 開 閉 原則 open closed principle,或者ocp 原文 software entities should be open for extension,but closed for modification.解釋 乙個軟體實體應當對擴充套件開放,對修改關閉。黎克特...