物件導向設計模式原則

2021-04-23 22:52:44 字數 2448 閱讀 1209

物件導向設計模式原則(**網路)

1.       單一職責原則(srp)

單一職責原則(srp),就乙個類而言,應該僅有乙個引起它變化的原因。也就是說,不要把變化原因各不相同的職責放在一起,因為不同的變化會影響到不相干的職責。再通俗一點地說就是,不該你管的事情你不要管,管好自己的事情就可以了,多管閒事害了自己也害了別人。

在軟體設計中,如果乙個類承擔的職責過多,就等於吧這些職責耦合在一起,而乙個職責的變化可能會削弱和抑制這個類完成其他職責的能力。這耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。

軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。如果多於乙個的動機去改變乙個類,那麼這個類就具有多餘乙個的職責,就應該要考慮類的職責分離。

2.       開放-封閉原則(the open-closed principle 簡稱ocp)

開放-封閉原則,或叫開-閉原則,是說軟體實體(類、模組、函式等)應該是可以擴充套件的,但是不可修改。不修改的意思就是是「你可以隨便增加新的類,但是不要修改原來的類」。從這個角度去理解就好多了,其實這裡還是乙個隔離變化的問題。

這個原則的兩個特徵:乙個是對於擴充套件是開放的;另乙個是對於更改是封閉的。

我們在設計開發任何系統時,都不可能指望系統一開始就需求確定,就不再變化(要這樣就太幸福了,哈哈),這是不現實的也是不科學的想法。既然需求是有一定變化的,那麼如何在面對需求變化時,設計的程式可以相對容易的修改,不至於說,新需求一來,就要把整個程式推倒重來(這樣會讓程式設計師瘋了不可,哈哈,你不想瘋吧)。怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出的新版本呢?開放-封閉原則就是我們的答案。

在程式設計時,我們要時刻考慮盡量把類設計的足夠好,寫好了就不要去修改,如果有新的需求來了,我們增加一些類來完成新的需求,原來的**能不動就不動。

絕對的對修改關閉是不可能的,無論模組是多麼的封閉,都會存在一些無法對之封閉的變化,既然不能完全封閉,設計人員必須對他設計的模組應該對那種變化封閉做出抉擇、他必須事先猜測出最有可能發生變化的變化種類,然後構建抽象來隔離那些變化。

開放-封閉原則是物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所生成的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發人員應該僅對程式中呈現出頻繁變化的部分都做出抽象,然後,對於應用程式中的每部分都刻意定進行抽象同樣不是乙個好主意,拒絕不成熟的抽象和抽象本身一樣重要。

3.       依賴倒轉原則(dip dependency inversion principle)

依賴倒轉原則:抽象不應該依賴於細節。細節應該依賴於抽象;高層不應該依賴於底層,兩者都應該依賴於抽象。說白了就是要針對介面程式設計,不要針對實現程式設計。抽象的東西才是最穩定的,也就是說,我們依賴的是它的穩定。

依賴倒轉其實可以說是物件導向設計的標誌,用哪種語言來編寫程式不重要,如果編寫是考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中的所有的依賴關係都是終止與抽象類或者介面,那就是物件導向的設計,反之就是過程化設計了。

4.       黎克特制代換原則

黎克特制代換原則(lsp):子型別必須能夠替換掉他的父型別。說白了就是乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而他察覺不出父類物件和子類物件的區別,也就是說,在軟體裡面,把父類都替換成他的子類,程式行為沒有變化。

有了黎克特制替換原則,才是繼承服用成為可能,只有當子類可以替換掉父類時,軟體的功能不受到影響,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。

有了黎克特制代換原則,才能使開放-封閉原則成為可能,正是由於子型別的可替換性才使得父型別的模組在無需修改的情況下擴充套件。

5.       介面隔離原則(isp)

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

6.    迪公尺特法則(lod)

迪公尺特法則(law of demeter或簡寫lod)又叫最少知識原則(least knowledge principle或簡寫為lkp):如果兩個類不彼此之間直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某個方法的話,可以通過第三者**這個呼叫。

迪公尺特法則首先強調的前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。

迪公尺特法則其根本思想強調的是類之間的松耦合。類之間的耦合越弱,越利於復用,乙個處於弱耦合的類被修改,不會對有關係的類造成波及。

7.    合成/聚合復用原則(composite/aggregate reuse principle或carp)

合成/聚合復用原則(composite/aggregate reuse principle或carp):經常又叫做合成復用原則(composite reuse principle或crp),就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新物件通過向這些物件的委派達到復用已有功能的目的。我白了就是要盡量使用合成/聚合,盡量不要使用繼承。

物件導向設計模式原則

一 單一職責原則srp single responsibility principle 單一職責原則,指的是乙個類應該僅有乙個引起它變化的原因。變化的原因,即所謂的 職責 如果乙個類有多個引起變化的原因,就意味著這個類有多個職責,也就是說多個職責耦合在了一起。這會造成相互影響,可能乙個職責變化影響到...

物件導向設計模式原則

本文為 設計模式之禪 第二章的讀書筆記 定義 應該有且僅有乙個原因引起類的變化 難點 如何劃分職責 實踐 一般專案類很多時候沒法滿足 單一職責原則,但是介面一定要滿足單一職責原則 定義 凡是父類能出現的地方,子類都能夠出現 具體分為三個層面 注 此時是通過過載而不是重寫父類的方法,實現子類的功能 定...

設計模式 物件導向設計原則

軟體的可維護性和可複製性是兩個非常重要的軟體質量屬性 物件導向物件設計原則是設計模式學習的基礎。每乙個設計模式都符合乙個或者多個物件導向設計原則 單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小 單一設計原則 乙個物件應該只包含單一的職責,並且該職責被完整的封裝在乙個類裡 這也意味著 ...