天天看點

軟體設計六大原則

1、[Single Responsibility Principle] 單一職責原則:

[優化代碼的第一步] —— 一個功能類隻負責單一功能或一類的功能。
例如:圖檔加載庫:一個類負責加載功能,一個類負責緩存資料功能)
           

2、[Open Close Principle] 開閉原則:

[讓程式更穩定、更靈活] —— 對擴充開放【盡量通過繼承的方式去擴充實作,一般修改源代碼和擴充代碼會同時存在】,對修改關閉【盡量禁止修改原先的類的代碼】),遵守開閉原則的手段就是 [抽象](接口,或者抽象類)。
           

3、[Liskov Substitution Principle] 裡氏替換原則:

[建構擴充性更好的系統] —— 它依賴于繼承和多态兩大特性,所有引用基類的地方必須能透明的使用其子類的對象,相反地,有子類出現的地方父類未必能适應。裡氏替換原則的核心原理是 [抽象],抽象又依賴于繼承這個特性.
繼承的優點:
	(1)代碼重用,減少建立類的成本,每個子類都擁有父類的方法和屬性;
	(2)子類與父類基本相似,但又與父類有所差別;
	(3)提高代碼的可擴充性。
繼承的缺點:
	(1)繼承是侵入性的,隻要繼承就必須擁有父類的所有屬性和方法;
	(2)可能造成子類代碼備援、靈活性降低,因為子類必須擁有父類的屬性和方法。

	開閉原則和裡氏替換原則往往是生死相依、不棄不離的,通過裡氏替換來達到對擴充開放,對修改關閉的效果。然而,這兩個原則都同時強調了一個 OOP 的重要特性——抽象。
           

4、[Dependence Inversion Principle] 依賴倒置原則:

該原則有以下幾個關鍵點:
	(1)高層子產品不應該依賴低層子產品,兩者都應該依賴其抽象;
	(2)抽象不應該依賴細節;
	(3)細節應該依賴抽象。
	在Java語言中,抽象就是指接口或抽象類,兩者都是不能直接被執行個體化的;細節就是實作類,實作接口或繼承抽象類而産生的類就是細節。
	高層子產品就是調用端,低層子產品就是具體實作類。依賴倒置原則在Java 語言中的表現就是:子產品間的依賴通過抽象發生,實作類之間不發生直接的依賴關系,其依賴關系是通過接口或抽象類産生的。
	面向接口程式設計,或者說是面向抽象程式設計,這裡的抽象指的是接口或者抽象類。面向接口程式設計是面向對象精髓之一,也就是開閉原則和裡氏替換原則強調的抽象。
           

5、[Interface Segregation Principles] 接口隔離原則:

[系統有更高的靈活性] —— 用戶端不應該依賴它不需要的接口。另一種定義是:類間的依賴關系應該建立在最小的接口上。接口隔離原則将非常龐大、臃腫的接口拆分成更小的和更具體的接口.
接口隔離原則的目的是系統解耦,進而容易重構、更改和重新部署。
           

6、[Law of Demeter || Least Knowledge Principle]迪米特原則:

[更好的可擴充性] —— 一個類應該對自己需要耦合或調用的類知道得最少,類的内部如何實作與調用者或者依賴者沒關系,調用者或者依賴者隻需要知道它需要的方法即可,其他的可一概不用管。
類與類之間的關系越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大。