步步為營 .NET 設計模式學習筆記系列總結

來源:互聯網
上載者:User

設計模式我從開篇到23種設計模式的講解總共花了進兩個月的時間,其間有很多讀者給我提出了很好的建議,同時也指出了我的不足,對此我表示感謝,正是由於很多讀者的支援我才能堅持的寫到最後.在此表示我真誠的謝意.

系列導航

步步為營 .NET 設計模式學習筆記 一、開篇(設計模式之泡妞二十三招)

步步為營 .NET 設計模式學習筆記 二、Abstract Factory(抽象工廠)

步步為營 .NET 設計模式學習筆記 三、Strategy(策略模式)

步步為營 .NET 設計模式學習筆記 四、Singleton(單例模式)

步步為營 .NET 設計模式學習筆記 五、Prototype(原型模式)

步步為營 .NET 設計模式學習筆記 六、Adapter(適配器模式)

步步為營 .NET 設計模式學習筆記 七、Proxy(代理模式)

步步為營 .NET 設計模式學習筆記 八、State(狀態模式)

步步為營 .NET 設計模式學習筆記 九、Command(命令模式)

步步為營 .NET 設計模式學習筆記 十、Builder(建造者模式)

步步為營 .NET 設計模式學習筆記 十一、Iterator(迭代器模式)

步步為營 .NET 設計模式學習筆記 十二、Observer (觀察者模式)

步步為營 .NET 設計模式學習筆記 十三、Bridge (橋接模式)

步步為營 .NET 設計模式學習筆記 十四、Decorator(裝飾模式)

步步為營 .NET 設計模式學習筆記 十五、Composite(組合模式)

步步為營 .NET 設計模式學習筆記 十六、Facade(面板模式)

步步為營 .NET 設計模式學習筆記 十七、Flyweight(享元模式)

步步為營 .NET 設計模式學習筆記 十八、Template(模板模式)

步步為營 .NET 設計模式學習筆記 十九、Chain of Responsibility(職責鏈模式)

步步為營 .NET 設計模式學習筆記 二十、Mediator(中介者模式)

步步為營 .NET 設計模式學習筆記 二十一、Visitor(訪問者模式)

步步為營 .NET 設計模式學習筆記 二十二、Memento(備望錄模式)

步步為營 .NET 設計模式學習筆記 二十三、Interpreter(解譯器模式)

步步為營 .NET 設計模式學習筆記 二十四、Factory Method(Factory 方法模式)

設計模式原則

使用設計模式的根本原因是適用變化,提高代碼複用率,使軟體更具有可維護性和可擴充性。需要遵循以下幾個原則:單一職責原色、開放封閉原則(Open Closed Principal)、依賴倒置原則、裡氏代換原則。

1.單一職責原則

就一個類而言,應該只有一個引起他變化的原因。如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會消弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破會。

2.開放封閉原則

      軟體實體(類、模組、函數等)應該可以擴充,但不可以修改。也就是說對擴充是開放的,對修改是封閉的。一般來說,面對需求,對程式的改動是通過添加新代碼進行的,而不是更改現有代碼。

3.依賴倒置原則

      抽象不應該以來細節,細節應該依賴抽象,也就是提倡的“面對介面編程,而不是面對實現編程”。也可以這樣理解:高層模組不應該依賴底層模組,兩個都應該抽象;抽象不應該依賴細節,細節應該依賴抽象。

4.裡氏代換原則

      子類必須能夠替換掉他們的父類型。也就是說,在軟體開發過程中,子類替換掉父類,程式的功能行為沒有變化。只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被複用,而子類也可以在父類的基礎上增加新的行為。

三種設計模型

建立型模式
1.Singleton模式解決的是實體物件個數的問題。除了Singleton之外,其他建立型模式解決的都是new所帶來的耦合關係。
2.Factory Method、Abstract Factory、Builder都需要一個額外的工廠類來負責執行個體化“易變對象”,而Prototype則是通過原型(一個特殊的工廠類)來複製“易變對象”。
3.如果遇到“易變類”,起初的設計是從FactoryMethod開始,當遇到更多的複雜變化時,再考慮重構為其他三種原廠模式(Abstract Factory,Builder , Prototype )。

結構型模式
1.Adapter模式注重轉換介面,將不吻合的介面適配對接
2.Bridge模式注重分離介面與其實現,支援多維度變化
3.Composite模式注重統一介面,將“一對多”的關係轉化為“一對一”的關係
4.Decorator模式注重穩定介面,在此前提下為對象擴充功能
5.Facade模式注重簡化介面,簡化組件系統與外部客戶程式的依賴關係
6.Flyweight 模式注重保留介面,在內部使用共用技術對Object Storage Service進行最佳化
7.Proxy 模式注重假借介面,增加間接層來實現靈活控制

行為型模式
1.Template Method模式封裝演算法結構,支援演算法子步驟變化
2.Strategy模式注重封裝演算法,支援演算法的變化
3.State模式注重封裝與狀態相關的行為,支援狀態的變化
4.Memento模式注重封裝對象狀態變化,支援狀態儲存/恢複
5.Mediator模式注重封裝對象間的互動,支援對象互動的變化

6.Chain Of Responsibility模式注重封裝對象責任,支援責任的變化
7.Command模式注重將請求封裝為對象,支援要求的變化
8.Iterator 模式注重封裝集合對象內部結構,支援集合的變化
9.Interpreter模式注重封裝特定領域變化,支援領域問題的頻繁變化
10.Observer模式注重封裝對象通知,支援通訊對象的變化
11.Visitor模式注重封裝對象操作變化,支援在運行時為類階層動態添加新的操作。

設計模式應用總結:

1.設計模式建立在對象對系統變化點的基礎上進行,哪裡有變化點,哪裡應用設計模式。

2.設計模式應該以演化的方式來獲得,系統的變化點往往是經過不斷演化才能精確定位。

3.不能為了模式而模式,設計模式是一種軟體設計的軟力量,而非規標準,不應誇大設計模式的作用。

各種模式比較

設計模式

常用程度

適用層次

引入時機

結構複雜度

Abstract Factory

比較常用

應用級

設計時

比較複雜

Builder

一般

代碼級

編碼時

一般

Factory Method

很常用

代碼級

編碼時

簡單

Prototype

不太常用

應用級

編碼時、重構時

比較簡單

Singleton

很常用

代碼級、應用級

設計時、編碼時

簡單

Adapter

一般

代碼級

重構時

一般

Bridge

一般

代碼級

設計時、編碼時

一般

Composite

比較常用

代碼級

編碼時、重構時

比較複雜

Decorator

一般

代碼級

重構時

比較複雜

Facade

很常用

應用級、構架級

設計時、編碼時

簡單

Flyweight

不太常用

代碼級、應用級

設計時

一般

Proxy

比較常用

應用級、構架級

設計時、編碼時

簡單

Chain of Resp.

不太常用

應用級、構架級

設計時、編碼時

比較複雜

Command

比較常用

應用級

設計時、編碼時

比較簡單

Interpreter

不太常用

應用級

設計時

比較複雜

Iterator

一般

代碼級、應用級

編碼時、重構時

比較簡單

Mediator

一般

應用級、構架級

編碼時、重構時

一般

Memento

一般

代碼級

編碼時

比較簡單

Observer

比較常用

應用級、構架級

設計時、編碼時

比較簡單

State

一般

應用級

設計時、編碼時

一般

Strategy

比較常用

應用級

設計時

一般

Template Method

很常用

代碼級

編碼時、重構時

簡單

Visitor

一般

應用級

設計時

比較複雜

變化、實現、體現原則

設計模式

變化

實現

體現的原則

Abstract Factory

產品家族的擴充

封裝產品族系列內容的建立

開閉原則

Builder

對象組建的變化

封裝對象的組建過程

開閉原則

Factory Method

子類的執行個體化

對象的建立工作延遲到子類

開閉原則

Prototype

執行個體化的類

封裝對原型的拷貝

依賴倒置原則

Singleton

唯一執行個體

封裝對象產生的個數

 

Adapter

對象介面的變化

介面的轉換

 

Bridge

對象的多維度變化

分離介面以及實現

開閉原則

Composite

複雜物件介面的統一

統一複雜物件的介面

裡氏代換原則

Decorator

對象的組合職責

在穩定介面上擴充

開閉原則

Facade

子系統的高層介面

封裝子系統

開閉原則

Flyweight

系統開銷的最佳化

封裝對象的擷取

 

Proxy

對象訪問的變化

封裝對象的訪問過程

裡氏代換原則

Chain of Resp.

對象的請求過程

封裝對象的責任範圍

 

Command

請求的變化

封裝行為對對象

開閉原則

Interpreter

領域問題的變化

封裝特定領域的變化

 

Iterator

對象內部集合的變化

封裝對象內部集合的使用

單一職責原則

Mediator

對象互動的變化

封裝對象間的互動

開閉原則

Memento

狀態的輔助儲存

封裝對象狀態的變化

介面隔離原則

Observer

通訊對象的變化

封裝對象通知

開閉原則

State

對象狀態的變化

封裝與狀態相關的行為

單一職責原則

Strategy

演算法的變化

封裝演算法

裡氏代換原則

Template Method

演算法子步驟的變化

封裝演算法結構

依賴倒置原則

Visitor

對象操作變化

封裝對象操作變化

開閉原則

到這裡,設計模式系系就介紹完了,由於我的水平有限,存在失誤和不足,歡迎拍磚.

感謝spring yang
,在這轉載了。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.