設計模式之物件導向七大基本原則

2021-08-16 17:39:02 字數 2713 閱讀 3091

概述

在運用物件導向的思想進行軟體設計時,需要遵循的原則一共有7個,他們是:

單一職責原則(single responsibility principle)

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

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

超類存在的地方,子類是可以替換的。

依賴倒置原則(dependence inversion principle)

實現盡量依賴抽象,不依賴具體實現。

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

應當為客戶端提供盡可能小的單獨的介面,而不是提供大的總的介面。

迪公尺特法則(law of demeter)

又叫最少知識原則,乙個軟體實體應當盡可能少的與其他實體發生相互作用。

開閉原則(open close principle)

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

組合/聚合復用原則(composite/aggregate reuse principle carp)

盡量使用合成/聚合達到復用,盡量少用繼承。原則: 乙個類中有另乙個類的物件。

詳解:原則一:(srp:single responsibility principle)單一職責原則又稱單一功能原則

核心:解耦和增強內聚性(高內聚,低耦合)

描述:

類被修改的機率很大,因此應該專注於單一的功能。如果你把多個功能放在同乙個類中,功能之間就形成了關聯,改變其中乙個功能,有可能中止另乙個功能,這時就需要新一輪的測試來避免可能出現的問題。

原則二:開閉原則(ocp:open closed principle)

核心思想:對擴充套件開放,對修改關閉。即在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。根據開閉原則,在設計乙個軟體系統模組(類,方法)的時候,應該可以在不修改原有的模組(修改關閉)的基礎上,能擴充套件其功能(擴充套件開放)。

擴充套件開放:

某模組的功能是可擴充套件的,則該模組是擴充套件開放的。軟體系統的功能上的可擴充套件性要求模組是擴充套件開放的。

修改關閉:

某模組被其他模組呼叫,如果該模組的源**不允許修改,則該模組修改關閉的。軟體系統的功能上的穩定性,持續性要求是修改關的。

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

核心:

1.在任何父類出現的地方都可以用他的子類來替代(子類應當可以替換父類並出現在父類能夠出現的任何地方)子類必須完全實現父類的方法。在類中呼叫其他類是務必要使用父類或介面,如果不能使用父類或介面,則說明類的設計已經違背了lsp原則。

2.子類可以有自己的個性。子類當然可以有自己的行為和外觀了,也就是方法和屬性

3.覆蓋或實現父類的方法時輸入引數可以被放大。即子類可以過載父類的方法,但輸入引數應比父類方法中的大,這樣在子類代替父類的時候,呼叫的仍然是父類的方法。即以子類中方法的前置條件必須與超類中被覆蓋的方法的前置條件相同或者更寬鬆。

4.覆蓋或實現父類的方法時輸出結果可以被縮小。

原則四:依賴倒轉原則(dip:dependence inversion principle) 別名:依賴倒置原則或依賴反轉原則

核心:要依賴於抽象,不要依賴於具體的實現

1.高層模組不應該依賴低層模組,兩者都應該依賴其抽象(抽象類或介面)

2.抽象不應該依賴細節(具體實現)

3.細節(具體實現)應該依賴抽象。

三種實現方式:

1.通過建構函式傳遞依賴物件

2.通過setter方法傳遞依賴物件

3.介面宣告實現依賴物件

原則五:介面分離原則(isp:inte***ce segregation principle)

核心思想:不應該強迫客戶程式依賴他們不需要使用的方法。

介面分離原則的意思就是:乙個介面不需要提供太多的行為,乙個介面應該只提供一種對外的功能,不應該把所有的操作都封裝到乙個介面當中.

分離介面的兩種實現方法:

1.使用委託分離介面。(separation through delegation)

2.使用多重繼承分離介面。(separation through multiple inheritance)

原則六:合成復用原則(crp:composite reuse principle)

核心思想:盡量使用物件組合,而不是繼承來達到復用的目的。該原則就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分:新的物件通過向這些物件的委派達到復用已有功能的目的。

復用的種類:

1.繼承

2.合成聚合

注:在復用時應優先考慮使用合成聚合而不是繼承

原則七:迪公尺特原則(lod:law of demeter)又叫最少知識原則

核心思想:

乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。

(類間解耦,低耦合)意思就是降低各個物件之間的耦合,提高系統的可維護性;在模組之間只通過介面來通訊,而不理會模組的內部工作原理,可以使各個模組的耦合成都降到最低,促進軟體的復用

注: 1.在類的劃分上,應該建立有弱耦合的類;

2.在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權;

3.在類的設計上,只要有可能,乙個類應當設計成不變;

4.在對其他類的引用上,乙個物件對其它物件的引用應當降到最低;

5.盡量降低類的訪問許可權;

6.謹慎使用序列化功能;

7.不要暴露類成員,而應該提供相應的訪問器(屬性)

設計模式之物件導向的基本原則

實際開發中雖然很少用到設計模式,但還是需要學習一下。擴寬一下解決問題時的思路。剛入行時公司老手推薦了一本書 大話設計模式 結合實際且通俗易懂。今天先對物件導向的基礎做個總結 1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因 乙個類只負責一項職責 乙個類如果承擔的職責過多,就等於把這些職責...

物件導向設計基本原則

物件導向設計不外乎遵循五大原則 第一 單一職責原則 即 乙個類應該只負責單一的職責,而將其餘的職責讓其他類來承擔,這樣每個類之間相互協調來完成一件任務。第二 開閉原則 即對擴充套件是開放的,對修改是封閉的,因此需要注重抽象的運用 第三 替換原則 子類應該可以替換在父類出現的任何地方 第四 依賴倒置原...

物件導向設計基本原則

物件導向設計不外乎遵循五大原則 第一 單一職責原則 即 乙個類應該只負責單一的職責,而將其餘的職責讓其他類來承擔,這樣每個類之間相互協調來完成一件任務。第二 開閉原則 即對擴充套件是開放的,對修改是封閉的,因此需要注重抽象的運用 第三 替換原則 子類應該可以替換在父類出現的任何地方 第四 依賴倒置原...