天天看點

設計模式-程式員的靈魂拷問!

設計模式

    • 一、設計模式簡述
    • 二、設計模式的原則
    • 三、設計模式的分類
    • 四、設計模式的目的和核心
    • 五、最後

一、設計模式簡述

設計模式是用來在一個特定的環境中解決某一個問題的方案,它是一套被反複使用、經過大量驗證、經過分類設計的編碼經驗的總結,使用設計模式可以實作代碼的可複用性、讓代碼更易被人了解、保證代碼的品質和可靠性。

它就像軟體工程的基石,像一座大廈的鋼架一樣,要成為一個真正地程式設計高手,學會設計模式是必修的内功。

二、設計模式的原則

設計模式-程式員的靈魂拷問!

1、開放封閉原則

類的改動是通過增加代碼進行的,而不是修改源代碼。

2、單一職責原則

類的職責要單一,對外隻提供一種功能,而引起類變化的原因都應該隻有一個。

3、依賴倒置原則

依賴于抽象 (接口 ),不要依賴具體的實作 (類),也就是針對接口程式設計。

4、 接口隔離原則

不應該強迫客戶的程式依賴他們不需要的接口方法; 一個接口應該隻提供一種對外功能,不應該把所有操作都封裝到一個接口中去。

5、裡氏替換原則

任何抽象類出現的地方都可以用他的實作類進行替換;實際就是虛拟機制, 語言級别實作面向對象功能。

6、優先組合而不繼承原則

如果使用繼承,會導緻父類的任何變換都可能影響到子類的行為;如果使用對象組合,就降低了這種依賴關系。

7、迪米特法則

一個對象應當對其他對象盡可能少的了解, 進而降低各個對象之間的耦合, 提高系統的可維護性。

三、設計模式的分類

Gang of Four四位大神将設計模式分為三大類,23種設計模式。

設計模式-程式員的靈魂拷問!

1、三大類

建立型設計模式:和對象的建立有關,涉及到對象的執行個體化方式。

結構型設計模式:描述的是如何組合類以及獲得更好的結構。

行為型設計模式:用來對類或者對象怎麼互動和怎麼配置設定職責進行描述。

2、23中設計模式

建立型有5種設計模式:

1》單例模式( Singleton Pattern ):一個類僅有一個執行個體,并且隻提供一個通路它的全局對外口。

2》工廠模式( Factory Method Pattern ):定義一個建立産品對象的工廠接口,将實際建立工作放到到子類中。

3》抽象工廠模式( Abstract Factory Pattern ):定義一個建立一系列相關或者互相依賴的接口,而無需指定它們具體的類。

4》建造者模式( Builder Pattern ):将一個複雜的建構與其表示相分離,使得同樣的建構過程可以建立不同的表示。

5》原型模式( Prototype Pattern ):用原型執行個體指定建立對象的種類,并且通過拷貝這些原型建立新的對象。

結構型有7種設計模式:

6》代理模式( Proxy Pattern):為其他對象提供一種代理以控制對這個對象的通路。

7》裝飾者模式( Decorator Pattern ):動态的給一個對象添加一些額外的職責。

8》擴充卡模式( Adapter Pattern ):将一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不相容而不能一起工作的那些類可以一起工作。

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

10》組合模式( Composite Pattern ):将對象組合成樹形結構以表示 “部分 --整體”的層次結構,使得使用者對單個對象群組合對象的使用具有一緻性。

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

12》享元模式( Flyweight Pattern ):以共享的方式高效的支援大量的細粒度的對象。

行為型有11種設計模式:

13》模闆方法模式( Template Method Pattern ):子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

14》指令模式( Command Pattern ):将一個請求封裝為一個對象,進而使你可用不同的請求對用戶端進行參數化、對請求排隊或記錄請求日志、支援可撤銷的操作。

15》責任鍊模式( Chain of Responsibility Pattern ):很多對象由每一個對象對其下家的引用而連接配接起來形成一條鍊; 請求在這個鍊上傳遞, 直到鍊上的某一個對象決定處理此請求,這使得系統可在不影響用戶端的情況下動态地重新組織鍊和配置設定責任。

16》政策模式( Strategy Pattern ):準備一組算法,并将每一個算法封裝起來,使得它們可以換。

17》中介者模式( Mediator Pattern ):定義一個中介對象來封裝系列對象之間的互動; 終結者使各個對象不需要顯示的互相調用 ,進而使其耦合性松散,而且可以獨立的改變他們之間的互動。

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

19》備忘錄模式 (Memento Pattern ):在不破壞封裝的前提下, 捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态。

20》通路者模式( Visitor Pattern ):表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

21》狀态模式( State Pattern):一個對象的行為,依賴于它所處的當時狀态。

22》解釋器模式( Interpreter Pattern ):描述了如何為簡單的語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子。

23》疊代器模式( Iterator Pattern ):提供了一種方法順序來通路一個聚合對象中的各個元素,而又不需要暴露該對象的内部表示。

四、設計模式的目的和核心

設計模式的最終目的是實作:高内聚,低耦合。

設計模式的核心就是繼承與多态,學習設計模式一定要了解繼承和多态。

五、最後

工作這麼多年,設計模式學了忘,忘了學,這次決定梳理一遍,也決定把自己的梳理分享出來,在學習的路上希望有你作伴。

繼續閱讀