GOF 23設計模式

GOF23種設計模式(Design Pattern)總結

比較

 

設計模式

常用程度

適用層次

引入時機

結構複雜度

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

一般

應用級

設計時

比較複雜

注:常用程度、適用層次、使用時機等基於自己的理解,結構複雜度基於C#語言,表格中所有內容僅供參考。

 

原則、變化與實現

 

設計模式

變化

實現

體現的原則

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

對象操作變化

封裝對象操作變化

開閉原則

 

 

學習

 

l         掌握設計模式的意圖以及解決的問題

l         掌握設計模式所封裝的變化點以及優缺點

l         瞭解設計模式的結構圖以及各角色的職責

l         項目中是否應用了設計模式不重要,重要的是設計模式是否正確應用

l         項目中應用的設計模式和GOF設計模式的結構是否一致不重要,重要的是是否從這個結構中得意

l         不管用了還是沒有用設計模式,如果違背了原則,就是不恰當的設計

l         沒有設計模式是萬能的,沉迷於獲得一個解決方案的話可能會導致項目結構複雜、代碼可讀性差、並且造成項目延期

 


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