設計模式基本原則

● 基本原則(1-5又稱SOLID)

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

    一個類別(Class),應該只有一個引起它變化的原因。建議介面一定要做到單職責。

  2. 開放、封閉原則 (OCP:Open Closed Principle)

    對於擴展是開放的 (Open for extension)
    對於修改是封閉的 (Closed for modification)

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

    子類別必須能替換父類別。
    只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行,有子類出現的地方,父類未必就能適應。

  4. 介面隔離原則 (ISP:Interface Segregation Principle)

    客戶端(Client)不應該依賴它不需要的接口。
    類別間的依賴關係應該建立在最小的接口上。

  5. 依賴倒轉原則 (DIP:Dependency Inversion Principle)

    高階模組不應該依賴於低階模組,兩者都該依賴抽象。
    抽象不應該依賴於具體實作方式。
    具體實作方式則應該依賴抽象。

  6. 迪米特法則 (LoD:Law of Demeter)也稱為最少知識原則(Least Knowledge Principle,LKP)

    最少知識原則 Principle of Least Knowledge。

    【舉例】
    一個類應該對自己需要耦合或調用的類知道得最少,你(被耦合或調用的類)的內部是如何復雜都和我沒關係,那是你的事情,我就知道你提供的這麼多public方法,我就調用這麼多,其他的我一概不關心。

  7. 合成/聚合重覆使用原則 (CARP)(Composite/Aggregate Reuse Principle)

    多用合成/聚合,少用繼承。
    在兩個物件有 has-a (has-parts、is-part-of)關係時 => 合成/聚合 (A has a B)
    當兩個物件有 is-a (is-a-kind-of)關係時 => 繼承 (Superman is a kind of Person)
    合成 (Composite):A、B兩物件有合成關係時,表示其中一個物件消失(ex:書本),另一個物件也會消失(ex:章節)。
    聚合 (Aggregate):A、B兩物件有聚合關係時,表示其中一個物件消失(ex:球隊),另一個物件不會消失(ex:球員)。

● 設計模式(分三大類)

一、 創建型設計模式 (Creational Design Patterns)

1. 簡單工廠模式 (Simple Factory Pattern)
2. 工廠方法模式 (Factory Method Pattern)
3. 抽象工廠模式 (Abstract Factory Pattern)
4. 建造者模式(生成器模式) (Builder Pattern)
5. 原型模式 (Prototype Pattern)
6. 單例模式 (Singleton Pattern)

二、 結構型設計模式 (Structural Design Patterns)

1. 適配器模式 (Adapter Pattern)
2. 橋接模式 (Bridge Pattern)
3. 組合模式 (Composite Pattern)
4. 裝飾模式 (Decorator Pattern)
5. 外觀模式 (Facade Pattern)
6. 享元模式 (Flyweight Pattern)
7. 代理模式 (Proxy Pattern)

三、 行為型設計模式 (Behavioral Design Patterns)

1. 責任鏈模式 (Chain-of-responsibility Pattern)
2. 命令模式 (Command Pattern)
3. 解釋器模式 (Interpreter Pattern)
4. 迭代器模式 (Iterator Pattern)
5. 中介者模式 (Mediator Pattern)
6. 備忘錄模式 (Memento Pattern)
7. 觀察者模式 (發佈/訂閱模式) (Observer Pattern)
8. 狀態模式 (State Pattern)
9. 策略模式 (Strategy Pattern)
10. 模板方法模式 (Template Method Pattern)
11. 訪問者模式 (Visitor Pattern)