常見的物件導向設計原則

2021-08-08 00:10:48 字數 1910 閱讀 8300

一、單一職責原則srp(single responsibility principle)

每乙個類應該專注於做一件事情。

二、開發-關閉原則ocp(open-closed principle)

面對擴充套件開放,面對修改關閉。

三、黎克特制替換原則lsp(liskov substitution principle)

超類出現的地方,子類一定可以出現。

四、依賴倒置原則dip(dependence inversion principle)

依賴倒置原則即要依賴於物件,不要依賴於具體類

五、介面隔離原則isp(inte***ce segregation principle)

使用多個專門的介面代替乙個統一的介面。

六、最少知識原則lkp(least knowledge principle)

最少知識原則即迪公尺特法則,乙個軟體實體應當盡可能少的與其他實體發生相互作用。

七、其他原則

除了以上原則,還有一些大家熟知的原則:

<1>面向介面程式設計。

<2>優先使用組合或聚合,而非繼承。

<3>乙個類需要的資料應該隱藏在類的內部。

<4>類之間應該零耦合或者只有傳到耦合。

<5>在水平方向上盡可能統一地分布系統功能。

單一職責原則

單一職責原則就是指乙個類或者模組應該有且只有乙個改變的原因。

1. 可以降低類的複雜度,乙個類或模組只負責一項職責;

2. 可以增加類的可讀性,提高系統的可維護性;

注:這個原則很難實現,實際開發中職責的粒度大小、職責細化沒有統一標準,所以實際開發中最容易違反。

開發-關閉原則

所謂開閉原則,即乙個類或模組應該對擴充套件開放,對修改關閉。開閉原則主要體現在對擴充套件開放,對修改關閉,意味著有新需求或需求變化時,可以在不修改的情況下進行擴充套件。

黎克特制替換原則

黎克特制替換原則即在軟體中基類可以出現的地方,子類一定可以出現,程式將不會產生任何錯誤和異常,反過來則不成立,如果乙個軟體實體使用的是乙個子類物件的話,那麼它不一定能夠使用基類物件。

注:子類的所有方法必須在父類中宣告,或子類必須實現父類中宣告的所有方法。盡量把父類設計為抽象類或者介面,讓子類繼承父類或實現父介面,並實現在父類中宣告的方法,執行時,子類例項替換父類例項,我們可以很方便地擴充套件系統的功能,同時無須修改原有子類的**,增加新的功能可以通過增加乙個新的子類來實現。

依賴倒置原則

依賴倒轉原則即要依賴於抽象,不要依賴於具體。

- 高層模組不應該依賴於底層模組,二者都應該依賴於抽象。

- 抽象不應該依賴於具體,具體實現應該依賴於抽象。

依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,減少並行開發引起的風險,提高**的可讀性和可維護性。

介面隔離原則

客戶端不應該依賴它不需要的介面;乙個類對另乙個類的依賴應該建立在最小的介面上。

使用多個專門的介面比使用單一的總介面要好。

乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面的汙染。

「不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的類層次結構。」這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫使用者使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

最少知識原則

最少知道原則(least knowledge principle 簡寫lkp)又叫作迪公尺特法則(law of demeter),就是說乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。英文簡寫為: lod.

-如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中的乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。

物件導向設計原則

oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...

物件導向設計原則

物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...

物件導向設計原則

oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...