面向對象設計模式 -- 六大設計原則
面向對象設計模式 --?設計原則
????????寫代碼時,經(jīng)常性的會遇到許多糾結的問題,比如,在修改用戶信息時,猶豫是寫多個方法來分別實現(xiàn)對應信息的修改,還是寫一個類,根據(jù)某一參數(shù)來判斷是哪個數(shù)值的修改,然后在方法中一堆 if 或者 switch 來修改等等。
????????如果是,那很顯然,對于面向對象的設計模式,你還沒有了解太多,否則你會對這些猶豫的處理會很有條理。
單一職責
一個對象或接口應該只包含單一的職責,且該職責被完整的封裝在一個類中。
開閉原則
一個軟件實體(類、函數(shù)等)應該對外拓展開放,對修改關閉。
里式代換
原定義:
第一種定義--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. 如果對每一個類型為S的對象o1,都有類型為T的對 象o2,使得以T定義的所有程序P在所有的對象o1都代換成o2時,程序P的行為沒有發(fā)生變 化,那么類型S是類型T的子類型。
就是說一個子類可以完全替換父類的使用。
第二種定義--Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. 所有引用基類的地方必須能透明地使用其子類的 對象。
依賴倒轉
?????高層模塊不應該依賴底層模塊,應該都依賴于抽象;
? ? ?抽象? ? ? ?不應該依賴于細節(jié),細節(jié)應該依賴于抽象。
????就是說抽象應該是在抽象與細節(jié)之間是獨立的,不需要考慮已經(jīng)實現(xiàn)的細節(jié)。
接口隔離
?????不應繼承不需要的接口。
?????這里不是表面的類不繼承其他不需要的接口,還蘊含的潛規(guī)則是:已經(jīng)繼承的接口中也不出現(xiàn)不需要的接口。即,接口也應該保持自身的簡潔性。
合成復用
?????優(yōu)先使用對象組合,而不是繼承。
迪米特法則
????最少知識原則。即一個對象應該對其他對象有最少的了解。
?????對象在訪問其他對象時,可訪問的成員數(shù)量應該盡可能少。
參考:
設計模式之禪--秦小波