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