23天學(xué)完設(shè)計(jì)模式

前言

眾所周知,軟件設(shè)計(jì)模式一共有23種,從今天開始,每天一種設(shè)計(jì)模式,關(guān)鍵理解,重在實(shí)踐。

每種設(shè)計(jì)模式會(huì)結(jié)合uml圖及源碼去進(jìn)行研究學(xué)習(xí),以達(dá)到熟練掌握的目標(biāo)。

設(shè)計(jì)原則

在學(xué)習(xí)設(shè)計(jì)模式前先了解一下軟件設(shè)計(jì)的一些基本原則,因?yàn)樗械哪J蕉际菫榱似ヅ溥@些開發(fā)原則而設(shè)計(jì)的。

1. 單一職責(zé)原則(Single Responsibility Principle)

一個(gè)類只有一個(gè)引起它變化的原因,也就是只有一個(gè)職責(zé)。每一個(gè)職責(zé)都是變化的一個(gè)軸線,如果一個(gè)類有一個(gè)以上的職責(zé),這些職責(zé)就耦合在了一起。當(dāng)一個(gè)職責(zé)發(fā)生變化時(shí),可能會(huì)影響其它的職責(zé),這樣的軟件結(jié)構(gòu)是我們不提倡的。另外,多個(gè)職責(zé)耦合在一起,會(huì)嚴(yán)重影響代碼的復(fù)用性。

2. 開閉原則(Open-Close Principle)

開閉原則就是說對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果。所以一句話概括就是:為了使程序的擴(kuò)展性好,易于維護(hù)和升級。想要達(dá)到這樣的效果,我們需要使用接口和抽象類。

3. 里氏代換原則(Liskov Substitution Principle)

里氏代換原則(Liskov Substitution Principle LSP)面向?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ī)范。

4. 依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)

所謂依賴倒置原則(Dependence Inversion Principle)就是要依賴于抽象,不要依賴于具體。簡單的說就是要求對抽象進(jìn)行編程,不要對實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。

實(shí)現(xiàn)開閉原則的關(guān)鍵是抽象化,并且從抽象化導(dǎo)出具體化實(shí)現(xiàn),如果說開閉原則是面向?qū)ο笤O(shè)計(jì)的目標(biāo)的話,那么依賴倒轉(zhuǎn)原則就是面向?qū)ο笤O(shè)計(jì)的主要手段。

5. 接口隔離原則(Interface Segregation Principle)

這個(gè)原則的意思是:使用多個(gè)隔離的接口,比使用單個(gè)接口要好。還是一個(gè)降低類之間的耦合度的意思,從這兒我們看出,其實(shí)設(shè)計(jì)模式就是一個(gè)軟件的設(shè)計(jì)思想,從大型軟件架構(gòu)出發(fā),為了升級和維護(hù)方便。

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

合成復(fù)用原則就是指在一個(gè)新的對象里通過關(guān)聯(lián)關(guān)系(包括組合關(guān)系和聚合關(guān)系)來使用一些已有的對象,使之成為新對象的一部分;新對象通過委派調(diào)用已有對象的方法達(dá)到復(fù)用其已有功能的目的。簡言之:要盡量使用組合/聚合關(guān)系,少用繼承。

7. 迪米特法則(Demeter Principle)

為什么叫最少知道原則,就是說:一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨(dú)立。也就是說一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。這樣,當(dāng)一個(gè)模塊修改時(shí),就會(huì)盡量少的影響其他的模塊,擴(kuò)展會(huì)相對容易,這是對軟件實(shí)體之間通信的限制,它要求限制軟件實(shí)體之間通信的寬度和深度。

在了解了這幾類設(shè)計(jì)原則之后,會(huì)對我們之后學(xué)習(xí)設(shè)計(jì)模式起到如虎添翼的效果,可能有些原則這時(shí)還沒看懂,不過沒關(guān)系,我們會(huì)在之后的學(xué)習(xí)中更加了解設(shè)計(jì)原則的含義。

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

設(shè)計(jì)模式共有23個(gè),可分為三大類:創(chuàng)建模式(5種),結(jié)構(gòu)模式(7種),行為模式(11種),我們一個(gè)一個(gè)來學(xué)習(xí)。

我把所有的源碼都放在了我的github上,有需要的同學(xué)自取,如果覺得還不錯(cuò)的話請star一下該項(xiàng)目 :)

創(chuàng)建模式

  • 抽象工廠模式 (Abstract Factory)

  • 建造者模式 (Builder)

  • 工廠方法模式 (Factory Method)

  • 原型模式 (Prototype)

  • 單例模式 (Singleton)

結(jié)構(gòu)模式

  • 適配器模式 (Adapter)

  • 橋接模式 (Bridge)

  • 組合模式 (Composite)

  • 修飾模式 (Decorator)

  • 外觀模式 (Facade)

  • 享元模式 (Flyweight)

  • 代理模式(Proxy)

行為模式

  • 責(zé)任鏈模式 (Chain of Responsibility)

  • 命令模式 (Command)

  • 解釋器模式 (Interpreter)

  • 迭代器模式 (Iterator)

  • 中介者模式 (Mediator)

  • 備忘錄模式 (Memento)

  • 觀察者模式(Observer)

  • 狀態(tài)模式 (State)

  • 策略模式 (Strategy)

  • 模板方法模式(Template Method)

  • 訪問者模式 (Visitor)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容