設計模式大綱

zhuhy發表於2024-05-28

設計模式大綱

設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。使用設計模式可以提高程式碼的可讀性、可擴充套件性、可靠性和可測試性。設計模式是軟體工程中常用的一種軟體設計原則,它是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。

設計模式的目的在於:

  1. 為了可重用程式碼,讓程式碼更容易被他人理解和使用。
  2. 為了可靠性,讓程式碼更容易被正確使用。
  3. 為了可擴充套件性,讓程式碼更容易被修改。
  4. 為了可維護性,讓程式碼更容易被修改。
  5. 為了降低耦合度,讓程式碼更容易被維護。

設計模式的原則

  1. 開閉原則(Open-Closed Principle):一個軟體實體應當對擴充套件開放,對修改關閉。
  2. 里氏替換原則(Liskov Substitution Principle):所有引用基類的地方必須能透明地使用其子類的物件。
  3. 依賴倒置原則(Dependence Inversion Principle):高層模組不應該依賴低層模組,二者都應該依賴其抽象。
  4. 介面隔離原則(Interface Segregation Principle):使用多個專門的介面,而不使用單一的總介面。
  5. 迪米特法則(Law of Demeter):一個物件應當儘量少地與其他物件通訊。
  6. 單一職責原則(Single Responsibility Principle):一個類只負責一項職責,其變化不會影響其他類。
  7. 最少知識原則(Least Knowledge Principle):一個物件應當儘量減少與其他物件有關的知識,只與自己的職責相關。

設計模式概述

設計模式是一套被反覆使用、多數人知曉和認可、經過分類的程式碼設計經驗的總結。設計模式通常分為三大類:建立型模式、結構型模式和行為型模式。以下是每類模式的詳細分類和一些常見的設計模式:

建立型模式(Creational Patterns)

這些模式提供了一種在建立物件時適用的最佳做法,旨在解決物件建立過程中的複雜性問題。

  1. 單例模式(Singleton Pattern):確保一個類只有一個例項,並提供一個全域性訪問點。
  2. 工廠方法模式(Factory Method Pattern):定義一個用於建立物件的介面,讓子類決定例項化哪個類。
  3. 抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
  4. 建造者模式(Builder Pattern):將一個複雜物件的構建過程與它的表示分離,使得同樣的構建過程可以建立不同的表示。
  5. 原型模式(Prototype Pattern):透過複製現有物件來建立新物件,而不是透過類的例項化建立物件。

結構型模式(Structural Patterns)

這些模式關注物件的組合或結構,解決如何將類或物件組合在一起形成更大的結構。

  1. 介面卡模式(Adapter Pattern):將一個類的介面轉換成客戶希望的另一個介面,使得原本由於介面不相容而不能一起工作的類可以一起工作。
  2. 裝飾模式(Decorator Pattern):動態地給一個物件新增一些額外的職責,裝飾模式相比生成子類更為靈活。
  3. 代理模式(Proxy Pattern):為其他物件提供一種代理以控制對這個物件的訪問。
  4. 外觀模式(Facade Pattern):為子系統中的一組介面提供一個一致的介面,使得子系統更容易使用。
  5. 橋接模式(Bridge Pattern):將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
  6. 組合模式(Composite Pattern):將物件組合成樹形結構以表示“部分-整體”的層次結構,使得客戶端對單個物件和組合物件的使用具有一致性。
  7. 享元模式(Flyweight Pattern):透過共享盡可能多的相同部分來減少記憶體使用。

行為型模式(Behavioral Patterns)

這些模式關注物件之間的責任分配和通訊,解決物件之間如何協作和通訊的問題。

  1. 策略模式(Strategy Pattern):定義一系列演算法,把每一個演算法封裝起來,並且使它們可互換。
  2. 觀察者模式(Observer Pattern):定義物件間一種一對多的依賴關係,使得每當一個物件改變狀態時,其相關依賴物件都得到通知並被自動更新。
  3. 命令模式(Command Pattern):將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化、對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。
  4. 迭代器模式(Iterator Pattern):提供一種方法順序訪問一個聚合物件中的各個元素,而又不需要暴露該物件的內部表示。
  5. 職責鏈模式(Chain of Responsibility Pattern):為請求建立一個接收者物件的鏈,這些物件可以處理請求,或者傳遞請求到下一個接收者。
  6. 中介者模式(Mediator Pattern):定義一個物件,該物件封裝一組物件如何互動。
  7. 備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,以便以後恢復它。
  8. 模板方法模式(Template Method Pattern):定義一個操作中的演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
  9. 狀態模式(State Pattern):允許一個物件在其內部狀態改變時改變其行為,看起來物件好像修改了它的類。
  10. 訪問者模式(Visitor Pattern):表示一個作用於某物件結構中的各元素的操作,使得可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
  11. 直譯器模式(Interpreter Pattern):給定一個語言,定義它的文法的一種表示,並定義一個直譯器,該直譯器使用該表示來解釋語言中的句子。

設計模式總結

這些設計模式提供了一種標準化的解決方案,以應對軟體設計中的常見問題,提高程式碼的可維護性、靈活性和可重用性。

相關文章