23天學完設計模式

前言

衆所周知,軟件設計模式一共有23種,從今天開始,每天一種設計模式,關鍵理解,重在實踐。

每種設計模式會結合uml圖及源碼去進行研究學習,以達到熟練掌握的目標。

設計原則

在學習設計模式前先了解一下軟件設計的一些基本原則,因爲所有的模式都是爲了匹配這些開發原則而設計的。

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

一個類只有一個引起它變化的原因,也就是隻有一個職責。每一個職責都是變化的一個軸線,如果一個類有一個以上的職責,這些職責就耦合在了一起。當一個職責發生變化時,可能會影響其它的職責,這樣的軟件結構是我們不提倡的。另外,多個職責耦合在一起,會嚴重影響代碼的複用性。

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

開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:爲了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類。

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

里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承複用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加新的行爲。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。

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

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

實現開閉原則的關鍵是抽象化,並且從抽象化導出具體化實現,如果說開閉原則是面向對象設計的目標的話,那麼依賴倒轉原則就是面向對象設計的主要手段。

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

這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發,爲了升級和維護方便。

6. 合成複用原則(Composite Reuse Principle)

合成複用原則就是指在一個新的對象裏通過關聯關係(包括組合關係和聚合關係)來使用一些已有的對象,使之成爲新對象的一部分;新對象通過委派調用已有對象的方法達到複用其已有功能的目的。簡言之:要儘量使用組合/聚合關係,少用繼承。

7. 迪米特法則(Demeter Principle)

爲什麼叫最少知道原則,就是說:一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。也就是說一個軟件實體應當儘可能少的與其他實體發生相互作用。這樣,當一個模塊修改時,就會盡量少的影響其他的模塊,擴展會相對容易,這是對軟件實體之間通信的限制,它要求限制軟件實體之間通信的寬度和深度。

在瞭解了這幾類設計原則之後,會對我們之後學習設計模式起到如虎添翼的效果,可能有些原則這時還沒看懂,不過沒關係,我們會在之後的學習中更加了解設計原則的含義。

設計模式

設計模式共有23個,可分爲三大類:創建模式(5種),結構模式(7種),行爲模式(11種),我們一個一個來學習。

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

創建模式

  • 抽象工廠模式 (Abstract Factory)

  • 建造者模式 (Builder)

  • 工廠方法模式 (Factory Method)

  • 原型模式 (Prototype)

  • 單例模式 (Singleton)

結構模式

  • 適配器模式 (Adapter)

  • 橋接模式 (Bridge)

  • 組合模式 (Composite)

  • 修飾模式 (Decorator)

  • 外觀模式 (Facade)

  • 享元模式 (Flyweight)

  • 代理模式(Proxy)

行爲模式

  • 責任鏈模式 (Chain of Responsibility)

  • 命令模式 (Command)

  • 解釋器模式 (Interpreter)

  • 迭代器模式 (Iterator)

  • 中介者模式 (Mediator)

  • 備忘錄模式 (Memento)

  • 觀察者模式(Observer)

  • 狀態模式 (State)

  • 策略模式 (Strategy)

  • 模板方法模式(Template Method)

  • 訪問者模式 (Visitor)

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