索引目錄&&傳送門:

總體來說設計模式分為三大類:

創建型模式(5種):單例模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式

結構型模式(7種):適配器模式、裝飾者模式、代理模式、外觀模式、橋接模式、組合模式、享元模式

行為型模式(11種):策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式

總結結構圖

這裡可能看不清楚:大圖鏈接 (提示:放大查看)

1、設計模式的六大原則

1、開閉原則(Open Close Principle)

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

2、里氏代換原則(Liskov Substitution Principle)

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

3、依賴倒轉原則(Dependence Inversion Principle)

  這個原則是開閉原則的基礎,具體內容:針對對介面編程,依賴於抽象而不依賴於具體。

4、介面隔離原則(Interface Segregation Principle)

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

5、迪米特法則,又稱最少知道原則(Demeter Principle)

  最少知道原則是指:一個實體應當盡量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成復用原則(Composite Reuse Principle)

  合成復用原則是指:盡量使用合成/聚合的方式,而不是使用繼承。

2、創建型模式(5種)

單例模式(Singleton):保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

工廠方法(Factory Method):定義一個創建對象的介面,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。

抽象工廠(Abstract Factory):提供一個創建一系列相關或相互依賴對象的介面,而無需指定它們具體的類。

建造者模式(Builder):將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

原型模式(Prototype):用原型實例指定創建對象的種類,並且通過拷貝這些原型來創建新的對象。

3、結構型模式 (7種)

適配器模式(Adapter):適配器模式把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。

裝飾模式(Decrator):裝飾模式是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

代理模式(Proxy):為其他對象提供一種代理以控制對這個對象的訪問 ;

外觀模式(Facade):為子系統中的一組介面提供一個一致的界面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

橋接模式(Bridge):將抽象部分與實現部分分離,使它們都可以獨立的變化。

組合模式(Composite):允許你將對象組合成樹形結構來表現"整體-部分"層次結構。 組合能讓客戶以一致的方法處理個別對象以及組合對象。

享元模式(Flyweight):運用共享技術有效地支持大量細粒度的對象。

4、行為型模式(11種)

策略模式(Strategy):定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換。

模板方法(Template Method):一個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟。

觀察者模式(Observer):定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。

迭代器模式(Iterator):提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示;

職責鏈模式(Chain of Responsibility):避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。

命令模式(Command):將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數化,對請求排隊和記錄請求日誌,以及支持可撤銷的操作;

備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣就可以將該對象恢復到原先保存的狀態。

狀態模式(State):允許對象在內部狀態改變時改變它的行為, 對象看起來好像修改了它的類。

訪問者模式(Visitor):表示一個作用於其對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。

中介者模式(Mediator):用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯示地相互引用。從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。

解釋器模式(Interpreter):給定一個語言,定義它的文法表示,並定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子。

5、總結篇

目的:為了代碼的復用、容易理解和保證代碼的可靠性。最終要達成的效果是:可擴展性、可修改性、可替換性。

設計模式四大階段:

  1、沒學之前,什麼是設計模式,老聽別人說設計模式,感覺好高大上,那它到底是什麼鬼。這時我們設計的代碼復用性很差、難以維護。

  2、學了幾個模式後,感覺很簡單,於是到處想著要用自己學過的模式,這樣就會造成濫用。最後感覺還不如不用。

  3、學完全部模式時,感覺很多模式太相似了,無法很清晰的知道各模式之間的區別、聯繫,這時一臉懵逼,腦子一團亂麻。在使用時,分不清要使用那種模式。

  4、模式已熟記於心,已忘其形,深知其意,達到無劍勝有劍的境界,恭喜你,萬劍歸宗已練成!!!

PS:

在學習設計模式時,一定要理解模式的適用性。做到了解它的優點、弊端!!!

  設計模式非一日可成,需要我們長期的實踐,多看框架的源碼,多研究,會對你有很大的幫助!!!

PS:源碼地址 github.com/JsonShare/De

PS:博客園地址: Json_wangqiang - 設計模式解密 - 博客園

CSDN地址: Json_wangqiang -【 專欄 】- 《設計模式解密》


推薦閱讀:
相关文章