Design Pattern - 6大設計原則
單一職責原則(Single Responsibility Principle)
- 定義
- There should never be more than one reason for a class to change
- 應該有且僅有一個原因引起類別的變更
- 好處
- 類別的複雜性降低,實現什麼職責都有清晰明確的定義
- 可讀性提升。複雜性降低,可讀性當然提升
- 可維護性提升
- 變更引起的風險降低
里氏替換原則
- 繼承
- 優點
- 程式碼共享,減少創建類別的工作量,每個子類別都擁有父類別的方法和屬性
- 提升程式碼的重用性
- 子類別可以形似父類別,但又異於父類別
- 提升程式碼的可擴展性
- 提升產品或專案的開放性
- 缺點
- 繼承是侵入性的,只要繼承就必須擁有父類別的所有屬性和方法
- 降低程式碼的靈活性。子類別必須擁有父類別的屬性和方法,讓子類別自由的世界多了些約束
- 增強了耦和性。當父類別的常數、變數和方法被修改時,必需要考慮子類別的修改,而且在缺乏規範的環境下,這種修改可能會帶來非常糟糕的結果﹣大量的程式碼需要重構
- 定義
- If for eachobject p1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T
如果對每一個型別為S的物件o1,都有型別為T的物件o2,使得以T定義的所有程式P在所有的物件o1都替換成o2時,程式P的行為沒有發生變化,那麼型別S就是型別T的子型別
- Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it
所有參照基礎類別的地方必須能透明地使用其衍生類別的物件
- 含義
- 子類別必須完全實作父類別的方法
- 子類別可以有自已的個性
- 覆寫或實作父類別的方法時輸入參數可以被放大
- 覆寫或實作父類別的方法時輸出結果可以被縮小
倚賴倒置原則(Dependence Inversion Principle,DIP)
- 定義
- High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should not depend upon abstractions.
- 高層模組不應讓倚賴低層模組,兩者都應該倚賴其抽象
- 抽象不應該倚賴細節
- 細節應該倚賴抽象
- 倚賴的三種寫法
- 構造函式傳遞倚賴物件
- Setter方法傳遞倚賴物件
- 介面聲明倚賴物件
沒有留言:
張貼留言