SOLID組成:
● 單一職責原則 Single Responsibility Principle,SRP
● 開放閉合原則 Open Closed Principle,OCP
● 里氏替換原則 Liskov Substitution Principle,LSP
● 介面隔離原則 Interface Segregation Principle,ISP
● 依賴反轉原則 Dependency Inversion Principle,DIP
里氏替換原則
定義:
"If for each object o1 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"
目的:解決大型軟體開發,在實作階層與型態階層使用繼承建立功能類似組件,子類別可以擴充套件父類別的功能,但不改變父類別原有的功能。
以依賴反轉原則案例延伸試著解釋:
假設今天結帳的人很忙,所以補貨的會需要臨時支援,所以補貨流程就可以透過繼承結帳而實作結帳流程,但一個子類僅能繼承一個父類,這時透過調用結帳抽象類別並override方法,即不會影響到既有結帳流程,故「子類別可以擴充套件父類別的功能,但不改變父類別原有的功能」這段話理解起來就是倘一個型態在未來有很多實現方式應利用介面或抽象類別處理,最終實現交由具體類別去實作介面或繼承抽象類別,提供行為一致性與穩定性。
里氏替換原則講求介面背後的實現如何變動,其行為都需與當初對客戶承諾一致,故當程式碼複用時考慮組合,多態時使用介面和抽象類,所以其體現開放閉合原則並指導依賴反轉原則。
恩...這原則講得有點抽象,好難去用生活實例聯想
希望未來能更理解里氏替換原則