設計模式之六大原則和GOF分類方法

@著作權歸作者所有:來自CSDN博客作者大鬍子的艾娃的原創作品,如需轉載,請註明出處https://blog.csdn.net/qq_43148810,否則將追究法律責任。
如有錯誤的地方歡迎指正,謝謝!

一、設計模式的六大原則
1、開閉原則(Open Close Principle)
開閉原則的意思是:對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。簡言之,是爲了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,後面的具體設計中我們會提到這點。

2、里氏代換原則(Liskov Substitution Principle)
里氏代換原則是面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。LSP 是繼承複用的基石,只有當派生類可以替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被複用,而派生類也能夠在基類的基礎上增加新的行爲。里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。

3、依賴倒轉原則(Dependence Inversion Principle)
這個原則是開閉原則的基礎,具體內容:針對接口編程,依賴於抽象而不依賴於具體。

4、接口隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。它還有另外一個意思是:降低類之間的耦合度。由此可見,其實設計模式就是從大型軟件架構出發、便於升級和維護的軟件設計思想,它強調降低依賴,降低耦合。

5、迪米特法則,又稱最少知道原則(Demeter Principle)
最少知道原則是指:一個實體應當儘量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成複用原則(Composite Reuse Principle)
合成複用原則是指:儘量使用合成/聚合的方式,而不是使用繼承。

二、GOF-23種設計模式
按目的可分爲三大類:創建型模式、結構型模式、行爲型模式。
(一)創建型模式Creational Patterns
1、抽象工廠模式abstract factory:提供了一個創建一系列相關或互相依賴對象的接口,而無須指定他們具體的類。
2、建造者模式builder:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
3、工廠方法模式factory method:將類的實例化操作延遲到子類中完成,即由子類來決定究竟應該實例化(創建)哪一個類。
4、原型模式prototype:通過給出一個原型對象來指明所要創建的對象的類型,然後通過複製這個原型對象的辦法創建出更多同類型的對象。
5、單例模式singleton:確保在系統中某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例;

(二)結構型模式Structural Patterns
6、適配器模式adapter:將一個接口轉換成客戶希望的另一個接口,從而使接口不兼容的那些類可以一起工作。
7、橋接模式bridge:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
8、組合模式composite:通過組合多個對象形成樹形結構以表示“整體-部分”的結構層次,對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性。
9、裝飾模式decorator:動態地給一個對象增加一些額外的職責。
10、外觀模式facade:爲複雜子系統提供一個一致的接口。
11、享元模式flyweight:通過運用共享技術有效地支持大量細粒度對象的複用。
12、代理模式proxy:給某一個對象提供一個代理,並由代理對象控制對原對象的引用。

(三)行爲者模式Behavioral Patterns
13、職責鏈模式chain of responsibility:避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿着這條鏈傳遞請求,直到有對象處理它爲止。
14、命令模式command:將一個請求封裝爲一個對象,從而使得請求調用者和請求接收者解耦。
15、解釋器模式interpreter:描述如何爲語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子。
16、迭代器模式iterator:提供了一種方法來訪問聚合對象,而不用暴露這個對象的內部表示。
17、中介者模式mediator:通過一箇中介對象來封裝一系列的對象交互,使得各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。
18、備忘錄模式memento:在不破壞封裝的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣可以在以後將對象恢復到原先保存的狀態。
19、觀察者模式observer:定義了對象間的一種一對多依賴關係,使得每當一個對象狀態發生改變時,其相關依賴對象皆得到通知並被自動更新。
20、狀態模式state:允許一個對象在其內部狀態改變時改變它的行爲;
21、策略模式strategy:定義一系列算法,並將每一個算法封裝在一個類中,並讓它們可以相互替換,策略模式讓算法獨立於使用它的客戶而變化。
22、模板方法模式template method:定義一個操作中算法的骨架,而將一些步驟延遲到子類中。
23、訪問者模式visitor:表示一個作用於某對象結構中的各元素的操作,它使得用戶可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

三、設計模式個人理解
1、絕大數設計模式的實現是使用了繼承、組合和託管三種對象模型中的託管來實現的,利用抽象基類的指針或者引用來實現動態多態性(早綁定轉爲晚綁定),封裝變化點,實現解耦。
2、關注設計原則,不要被某種設計模式所限制,目標爲管理變化(並不能消除變化),提高複用,不要濫用設計模式。
3、靜態聯編執行效率高;動態聯編使用靈活,但是執行效率要低;模板實現屬於靜態聯編,但是又失靈活性,缺點是代碼膨脹,但是大多數情況是無法避免的,即合理的。
4、面對對象編程的同時更要關注接口&抽象類,關注變化點和穩定點,以及依賴關係。

更多內容請關注個人博客:https://blog.csdn.net/qq_43148810

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章