設(shè)計(jì)模式總綱

引用:嘟爺MD:總體介紹設(shè)計(jì)模式,未知會請見諒。

前言

一直不敢嘗試學(xué)習(xí)設(shè)計(jì)模式,總感覺自己能力不行,不敢接觸這么高深的東西。這次難得的機(jī)會,參加了一場公司的培訓(xùn),接觸到設(shè)計(jì)模式,聽過后發(fā)現(xiàn)其實(shí)設(shè)計(jì)模式也不是那樣高深和難以理解,實(shí)際開發(fā)中其實(shí)都不由自主用到了。這次開篇,一是整理自己學(xué)習(xí)過程中的筆記,準(zhǔn)備一天一個(gè)模式的分享;二是給自己壓力和動力,希望自己堅(jiān)持下來。后續(xù)博文皆是學(xué)習(xí)的整理筆記。沒辦法,人丑就要讀書。

正文

設(shè)計(jì)模式簡介

設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長的一段時(shí)間的試驗(yàn)和錯誤總結(jié)出來的。

設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項(xiàng)目中合理地運(yùn)用設(shè)計(jì)模式可以完美地解決很多問題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來與之對應(yīng),每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案,這也是設(shè)計(jì)模式能被廣泛應(yīng)用的原因。

設(shè)計(jì)模式六大原則

1、開閉原則(Open Close Principle)

開閉原則的意思是:對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果。簡言之,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級。想要達(dá)到這樣的效果,我們需要使用接口和抽象類,后面的具體設(shè)計(jì)中我們會提到這點(diǎn)。

2、里氏代換原則(Liskov Substitution Principle)

里氏代換原則是面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。LSP 是繼承復(fù)用的基石,只有當(dāng)派生類可以替換掉基類,且軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而派生類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對開閉原則的補(bǔ)充。實(shí)現(xiàn)開閉原則的關(guān)鍵步驟就是抽象化,而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。

3、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)

這個(gè)原則是開閉原則的基礎(chǔ),具體內(nèi)容:針對接口編程,依賴于抽象而不依賴于具體。

4、接口隔離原則(Interface Segregation Principle)

這個(gè)原則的意思是:使用多個(gè)隔離的接口,比使用單個(gè)接口要好。它還有另外一個(gè)意思是:降低類之間的耦合度。由此可見,其實(shí)設(shè)計(jì)模式就是從大型軟件架構(gòu)出發(fā)、便于升級和維護(hù)的軟件設(shè)計(jì)思想,它強(qiáng)調(diào)降低依賴,降低耦合。

5、迪米特法則,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個(gè)實(shí)體應(yīng)當(dāng)盡量少地與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨(dú)立。

6、合成復(fù)用原則(Composite Reuse Principle)

合成復(fù)用原則是指:盡量使用合成/聚合的方式,而不是使用繼承。

設(shè)計(jì)模式

學(xué)習(xí)順序 設(shè)計(jì)模式 常用程度 適用層次 引入時(shí)機(jī) 結(jié)構(gòu)復(fù)雜度 變化 實(shí)現(xiàn) 體現(xiàn)的原則
1 工廠模式(Factory Method) 很常用 代碼級 編碼時(shí) 簡單 子類的實(shí)例化 對象的創(chuàng)建工作延遲到子類 開閉原則
2 單例模式(Singleton) 很常用 代碼級、應(yīng)用級 設(shè)計(jì)時(shí)、編碼時(shí) 簡單 唯一實(shí)例 封裝對象產(chǎn)生的個(gè)數(shù)
3 外觀模式(Facade) 很常用 代碼級、應(yīng)用級 設(shè)計(jì)時(shí)、編碼時(shí) 簡單 子系統(tǒng)的高層接口 封裝子系統(tǒng) 開閉原則
4 模板模式(Template Method) 很常用 代碼級 編碼時(shí)、重構(gòu)時(shí) 簡單 算法子步驟的變化 封裝算法結(jié)構(gòu) 依賴倒置原則
5 抽象工廠模式(Abstract Factory) 比較常用 應(yīng)用級 設(shè)計(jì)時(shí) 比較復(fù)雜 產(chǎn)品家族的擴(kuò)展 封裝產(chǎn)品族系列內(nèi)容的創(chuàng)建 開閉原則
6 組合模式(Composite) 比較常用 代碼級 編碼時(shí)、重構(gòu)時(shí) 比較復(fù)雜 復(fù)雜對象接口的統(tǒng)一 統(tǒng)一復(fù)雜對象的接口 里氏代換原則
7 代理模式(Proxy) 比較常用 應(yīng)用級、構(gòu)架級 設(shè)計(jì)時(shí)、編碼時(shí) 簡單 對象訪問的變化 封裝對象的訪問過程 里氏代換原則
8 命令模式(Command) 比較常用 應(yīng)用級 設(shè)計(jì)時(shí)、編碼時(shí) 比較簡單 請求的變化 封裝行為對對象 開閉原則
9 觀察者模式(Observer) 比較常用 應(yīng)用級、構(gòu)架級 設(shè)計(jì)時(shí)、編碼時(shí) 比較簡單 通訊對象的變化 封裝對象通知 開閉原則
10 策略模式(Strategy) 比較常用 應(yīng)用級 設(shè)計(jì)時(shí) 一般 算法的變化 封裝算法 里氏代換原則
11 建造者模式(Builder) 一般 代碼級 編碼時(shí) 一般 對象組建的變化 封裝對象的組建過程 開閉原則
12 適配器模式(Adapter) 一般 代碼級 重構(gòu)時(shí) 一般 對象接口的變化 接口的轉(zhuǎn)換
13 橋接模式(Bridge) 一般 代碼級 設(shè)計(jì)時(shí)、編碼時(shí) 一般 對象的多維度變化 分離接口以及實(shí)現(xiàn) 開閉原則
14 裝飾器模式(Decorator) 一般 代碼級 重構(gòu)時(shí) 比較復(fù)雜 對象的組合職責(zé) 在穩(wěn)定接口上擴(kuò)展 開閉原則
15 迭代器模式(Iterator) 一般 代碼級、應(yīng)用級 編碼時(shí)、重構(gòu)時(shí) 比較簡單 對象內(nèi)部集合的變化 封裝對象內(nèi)部集合的使用 單一職責(zé)原則
16 中介者模式(Mediator) 一般 應(yīng)用級、構(gòu)架級 編碼時(shí)、重構(gòu)時(shí) 一般 對象交互的變化 封裝對象間的交互 開閉原則
17 備忘錄模式(Memento) 一般 代碼級 編碼時(shí) 比較簡單 狀態(tài)的輔助保存 封裝對象狀態(tài)的變化 接口隔離原則
18 狀態(tài)模式(State) 一般 應(yīng)用級 設(shè)計(jì)時(shí)、編碼時(shí) 一般 對象狀態(tài)的變化 封裝與狀態(tài)相關(guān)的行為 單一職責(zé)原則
19 訪問者模式(Visitor) 一般 應(yīng)用級 設(shè)計(jì)時(shí) 計(jì)較復(fù)雜 對象操作變化 封裝對象操作變化 開閉原則
20 原型模式(Prototype) 不太常用 應(yīng)用級 編碼時(shí)、重構(gòu)時(shí) 比較簡單 實(shí)例化的類 封裝對原型的拷貝 依賴倒置原則
21 享元模式(Flyweight) 不太常用 代碼級、應(yīng)用級 設(shè)計(jì)時(shí) 一般 系統(tǒng)開銷的優(yōu)化 封裝對象的獲取
22 責(zé)任鏈模式(Chain of Resp) 不太常用 應(yīng)用級、構(gòu)架級 設(shè)計(jì)時(shí)、編碼時(shí) 比較復(fù)雜 對象的請求過程 封裝對象的責(zé)任范圍
23 解釋器模式(Interpreter) 不太常用 應(yīng)用級 設(shè)計(jì)時(shí) 比較復(fù)雜 領(lǐng)域問題的變化 封裝特定領(lǐng)域的變化

下面用一個(gè)圖片來整體描述一下設(shè)計(jì)模式之間的關(guān)系:


設(shè)計(jì)模式之間的關(guān)系

總結(jié)

以上就是設(shè)計(jì)模式的大體介紹,是不是很亂,很迷糊。嘿嘿嘿嘿,我其實(shí)也不懂。但是沒關(guān)系,把目標(biāo)放小,一天就研究一個(gè)模式就行。順序就按照創(chuàng)建模式,結(jié)構(gòu)模式,行為模式學(xué)習(xí)下來,掐指一算加上現(xiàn)在這個(gè)開天辟地的立志貼,最后洋洋灑灑能產(chǎn)出24篇博文來。媽媽再也不用擔(dān)心我博客內(nèi)容太少了。


一直覺得自己寫的不是技術(shù),而是情懷,一篇篇文章是自己這一路走來的痕跡??繉I(yè)技能的成功是最具可復(fù)制性的,希望我的這條路能讓你少走彎路,希望我能幫你抹去知識的蒙塵,希望我能幫你理清知識的脈絡(luò),希望未來技術(shù)之巔上有你也有我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式之六大原則(轉(zhuǎn)載) 關(guān)于設(shè)計(jì)模式的六大設(shè)計(jì)原則的資料網(wǎng)上很多...
    霄霄霄霄閱讀 943評論 0 1
  • 設(shè)計(jì)模式 -- 概念 設(shè)計(jì)模式(Design Pattern)[https://baike.baidu.com/i...
    Whyn閱讀 563評論 0 1
  • 前言 設(shè)計(jì)模式六大原則網(wǎng)上資料比較多比較亂,本文將網(wǎng)上的一些好的資料做一下整理,以便隨時(shí)翻閱。友情提示,設(shè)計(jì)模式雖...
    簡單的土豆閱讀 1,509評論 0 10
  • 設(shè)計(jì)模式之六大原則(轉(zhuǎn)載) 設(shè)計(jì)模式之六大原則(轉(zhuǎn)載) 關(guān)于設(shè)計(jì)模式的六大設(shè)計(jì)原則的資料網(wǎng)上很多,但是很多地方解釋...
    天涯人1196閱讀 384評論 0 0
  • 不知不覺, 距離2016年奧運(yùn)會只剩12天。 每次看奧運(yùn),除了燃之外,Sir還覺得,命運(yùn)好神奇。 在全世界犄角旮旯...
    Sir電影閱讀 2,195評論 5 61

友情鏈接更多精彩內(nèi)容