GOF23种设计模式(Design Pattern)总结
比較
?
| 設(shè)計模式 | 常用程度 | 適用層次 | 引入時機(jī) | 結(jié)構(gòu)復(fù)雜度 |
| Abstract Factory | 比較常用 | 應(yīng)用級 | 設(shè)計時 | 比較復(fù)雜 |
| Builder | 一般 | 代碼級 | 編碼時 | 一般 |
| Factory Method | 很常用 | 代碼級 | 編碼時 | 簡單 |
| Prototype | 不太常用 | 應(yīng)用級 | 編碼時、重構(gòu)時 | 比較簡單 |
| Singleton | 很常用 | 代碼級、應(yīng)用級 | 設(shè)計時、編碼時 | 簡單 |
| Adapter | 一般 | 代碼級 | 重構(gòu)時 | 一般 |
| Bridge | 一般 | 代碼級 | 設(shè)計時、編碼時 | 一般 |
| Composite | 比較常用 | 代碼級 | 編碼時、重構(gòu)時 | 比較復(fù)雜 |
| Decorator | 一般 | 代碼級 | 重構(gòu)時 | 比較復(fù)雜 |
| Facade | 很常用 | 應(yīng)用級、構(gòu)架級 | 設(shè)計時、編碼時 | 簡單 |
| Flyweight | 不太常用 | 代碼級、應(yīng)用級 | 設(shè)計時 | 一般 |
| Proxy | 比較常用 | 應(yīng)用級、構(gòu)架級 | 設(shè)計時、編碼時 | 簡單 |
| Chain of Resp. | 不太常用 | 應(yīng)用級、構(gòu)架級 | 設(shè)計時、編碼時 | 比較復(fù)雜 |
| Command | 比較常用 | 應(yīng)用級 | 設(shè)計時、編碼時 | 比較簡單 |
| Interpreter | 不太常用 | 應(yīng)用級 | 設(shè)計時 | 比較復(fù)雜 |
| Iterator | 一般 | 代碼級、應(yīng)用級 | 編碼時、重構(gòu)時 | 比較簡單 |
| Mediator | 一般 | 應(yīng)用級、構(gòu)架級 | 編碼時、重構(gòu)時 | 一般 |
| Memento | 一般 | 代碼級 | 編碼時 | 比較簡單 |
| Observer | 比較常用 | 應(yīng)用級、構(gòu)架級 | 設(shè)計時、編碼時 | 比較簡單 |
| State | 一般 | 應(yīng)用級 | 設(shè)計時、編碼時 | 一般 |
| Strategy | 比較常用 | 應(yīng)用級 | 設(shè)計時 | 一般 |
| Template Method | 很常用 | 代碼級 | 編碼時、重構(gòu)時 | 簡單 |
| Visitor | 一般 | 應(yīng)用級 | 設(shè)計時 | 比較復(fù)雜 |
注:常用程度、適用層次、使用時機(jī)等基于自己的理解,結(jié)構(gòu)復(fù)雜度基于C#語言,表格中所有內(nèi)容僅供參考。
?
原則、變化與實現(xiàn)
?
| 設(shè)計模式 | 變化 | 實現(xiàn) | 體現(xiàn)的原則 |
| Abstract Factory | 產(chǎn)品家族的擴(kuò)展 | 封裝產(chǎn)品族系列內(nèi)容的創(chuàng)建 | 開閉原則 |
| Builder | 對象組建的變化 | 封裝對象的組建過程 | 開閉原則 |
| Factory Method | 子類的實例化 | 對象的創(chuàng)建工作延遲到子類 | 開閉原則 |
| Prototype | 實例化的類 | 封裝對原型的拷貝 | 依賴倒置原則 |
| Singleton | 唯一實例 | 封裝對象產(chǎn)生的個數(shù) | ? |
| Adapter | 對象接口的變化 | 接口的轉(zhuǎn)換 | ? |
| Bridge | 對象的多維度變化 | 分離接口以及實現(xiàn) | 開閉原則 |
| Composite | 復(fù)雜對象接口的統(tǒng)一 | 統(tǒng)一復(fù)雜對象的接口 | 里氏代換原則 |
| Decorator | 對象的組合職責(zé) | 在穩(wěn)定接口上擴(kuò)展 | 開閉原則 |
| Facade | 子系統(tǒng)的高層接口 | 封裝子系統(tǒng) | 開閉原則 |
| Flyweight | 系統(tǒng)開銷的優(yōu)化 | 封裝對象的獲取 | ? |
| Proxy | 對象訪問的變化 | 封裝對象的訪問過程 | 里氏代換原則 |
| Chain of Resp. | 對象的請求過程 | 封裝對象的責(zé)任范圍 | ? |
| Command | 請求的變化 | 封裝行為對對象 | 開閉原則 |
| Interpreter | 領(lǐng)域問題的變化 | 封裝特定領(lǐng)域的變化 | ? |
| Iterator | 對象內(nèi)部集合的變化 | 封裝對象內(nèi)部集合的使用 | 單一職責(zé)原則 |
| Mediator | 對象交互的變化 | 封裝對象間的交互 | 開閉原則 |
| Memento | 狀態(tài)的輔助保存 | 封裝對象狀態(tài)的變化 | 接口隔離原則 |
| Observer | 通訊對象的變化 | 封裝對象通知 | 開閉原則 |
| State | 對象狀態(tài)的變化 | 封裝與狀態(tài)相關(guān)的行為 | 單一職責(zé)原則 |
| Strategy | 算法的變化 | 封裝算法 | 里氏代換原則 |
| Template Method | 算法子步驟的變化 | 封裝算法結(jié)構(gòu) | 依賴倒置原則 |
| Visitor | 對象操作變化 | 封裝對象操作變化 | 開閉原則 |
?
?
學(xué)習(xí)
?
l???????? 掌握設(shè)計模式的意圖以及解決的問題
l???????? 掌握設(shè)計模式所封裝的變化點以及優(yōu)缺點
l???????? 了解設(shè)計模式的結(jié)構(gòu)圖以及各角色的職責(zé)
l???????? 項目中是否應(yīng)用了設(shè)計模式不重要,重要的是設(shè)計模式是否正確應(yīng)用
l???????? 項目中應(yīng)用的設(shè)計模式和GOF設(shè)計模式的結(jié)構(gòu)是否一致不重要,重要的是是否從這個結(jié)構(gòu)中得意
l???????? 不管用了還是沒有用設(shè)計模式,如果違背了原則,就是不恰當(dāng)?shù)脑O(shè)計
l???????? 沒有設(shè)計模式是萬能的,沉迷于獲得一個解決方案的話可能會導(dǎo)致項目結(jié)構(gòu)復(fù)雜、代碼可讀性差、并且造成項目延期
?
轉(zhuǎn)載于:https://www.cnblogs.com/Jackey_Chen/archive/2008/11/17/1335319.html
總結(jié)
以上是生活随笔為你收集整理的GOF23种设计模式(Design Pattern)总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Paint.Net学习笔记——二、窗体(
- 下一篇: [你必须知道的.NET]第二十七回:in