面向對象設計中常見的設計原則
開閉原則
單一職責原則
裡氏替換原則
依賴倒置原則
接口隔離原則
最少知識原則(迪米特法則)
少用繼承多用組合(合成複用原則)
一.開閉原則
定義:一個軟體實體應當對外擴充開放,對内關閉修改,即在設計一個子產品的時候,應當使這個子產品可以在不被修改的前提下可擴充。
作用:(1)隻對擴充代碼進行測試,源代碼依然可以運作。
(2)使代碼具有優質的可擴充性和維護性。
實作方法:可以通過**“抽象限制、封裝變化”**來實作開閉原則,即通過接口或者抽象類為軟體實體定義一個相對穩定的抽象層,而将相同的可變因素封裝在相同的具體實作類中。
舉例:
客戶需要一個減法軟體:客戶——>減法。
然後客戶現在需要加法軟體——>加法(在減法的基礎上将改為加法)。
上述這種做法是錯誤的,違背了開閉原則,對源代碼進行了修改!
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP350MRpWTx0keNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1gDOwQzN1AjM2EjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我們應該抽象出一個運算類或者聲明一個運算法則,裡面包括加法或者減法,當然也可以包括其它的!
這樣我們就不必須更改源碼,隻要實作類或者接口就可以了。這樣我們沒有改變我們的抽象層(限制封裝),同時通過不同子類的繼承或者實作接口來更改需求(封裝變化)!
二.單一職責原則
**定義:**單一職責原則規定一個類應該有且僅有一個引起它變化的原因,否則類應該被拆分成兩個類或者多個類
**優點:**降低了類的複雜度,提高了可讀性和可維護性。
舉例:
現有工作類:包含清理工作和文字工作
根據單子職責原則,我們需要将他們分為:清理類和文字工作類。
三.裡氏替換原則
定義: