這裡用簡單的我自己能理解的方式敘述這些設計原則。
SRP: Single Responsibility Principle (單一職責原則)
方法或是類別,都應該只會因為一個原因引起變更,讓類別、方法單一負責一件事。
OCP: Open Closed Principle (開放封閉原則)
開發系統一定會遇到修改,在需要修改時,原系統應該設計方式應具有擴展的新功能,舊功能程式碼應避免修改。
LSP: Liskov Substitution Principle (里氏替換原則)
因遵守繼承時子類別應取代父類別,如果無法被取代父類別。
LKP: Least Knowledge Principle (最小知識原則)
使用物件時應對該物件有最少的了解,避免所有的方法存取權限都設定 public ,降低非必要方法在其他類別中的牽連,也就是要懂的封裝,將內部使用的方法,降低存取權限。
ISP: Interface Segregation Principle (介面隔離原則)
假設定義一個動物的介面,其中有定義了飛行的方法,如果在實作狗類別時,介面中飛行的定義就是不需要的,應避免這樣的事情發生。
繼承介面在實作類別時,介面中的定義應都被使用到,並且是必須的,不可以發生定義的在類別實作時沒用到的情況,
因把不同功能的從介面中細分出來。
DIP: Dependency Inversion Principle (依賴反轉原則)
如果 A 、B兩個類別,在A類別中,需要使用到B類別時,才new 出實體,這樣可以說是,A類別沒有B類別,無法使用,應該依賴抽象,並可以隨時替換,以上的形況 A 可以說是高階模組,依賴B低階模組。
總結
以上的原則都是想辦法撰寫出減少改變的系統,用這些設計模式都在想辦法減少修改時要修改的量,因此可以避免錯誤產生。
SRP每個方法或類別都有該有的職責,因此可以避免修改
OCP 建立容易擴充的系統,因此原有的程式碼減少被修改的情況
LSP 父類別的行為,應該都要可以被子類別取代,若無法應思考為什麼類別的職責行為改變了
LKP 減少內部方法被使用,盡可能高內聚、低耦合,修改內部方法時,可以減少外部類別使用的耦合。
ISP 可能因為介面的定義,所有實作的類別皆改變
DIP 避免發生高階模組因低階模組改變而被迫一同變更。