设计模式(面向对象)设计的七大原则
聲明:本人設(shè)計模式模塊是集合網(wǎng)上資料和老師課件總結(jié)的知識點(diǎn),如本博客有侵權(quán),本人即刻刪。
設(shè)計模式(面向?qū)ο笤O(shè)計)原則,分別是:
1.開放封閉原則:對擴(kuò)展開放,對修改關(guān)閉
2.單一職責(zé)原則:一個類只做一件事情
3.依賴倒轉(zhuǎn)原則:采用接口編程
4.迪米特法則(最小知識原則):高內(nèi)聚 、低耦合
5.接口隔離原則:細(xì)節(jié)接口
6.合成/聚合復(fù)用原則:避免使用繼承
7.里氏代換原則:子類不能去修改父類的功能
1、開放封閉原則
概念:一個軟件實(shí)體如類、模板、和函數(shù)應(yīng)該對擴(kuò)展開放、對修改關(guān)閉。模塊應(yīng)該在盡量不修改源代碼的情況下進(jìn)行擴(kuò)展。
在軟件周期內(nèi),因?yàn)樽兓⑸壓途S護(hù)等原因需要對軟件原有代碼進(jìn)行修改時,可能會給代碼引入錯誤,也可能會使我們不得不對整個功能進(jìn)行重構(gòu),并且需要原有代碼經(jīng)過重新測試。當(dāng)軟件需求變化時,盡量通過擴(kuò)展軟件實(shí)體的行為來實(shí)現(xiàn)變化,而不是通過修改已有代碼來實(shí)現(xiàn)變化。
開放封閉原則是面向?qū)ο笤O(shè)計的核心所在,遵循這個原則可以帶來面向?qū)ο蠹夹g(shù)所聲稱的巨大好處,也就是可維護(hù)、可擴(kuò)展、可復(fù)用、靈活性好。開發(fā)人員應(yīng)該僅對程序中呈現(xiàn)的頻繁變化的那些部分作出抽象。
2、單一職責(zé)原則
概念:就一個類而言,應(yīng)該僅有一個引起它變化的原因。
當(dāng)我們在做編程的時候,很自然的回個一個類加上各種各樣的功能。這樣意味著,無論任何需求要來,你都需要更改這個類,這樣其實(shí)是很糟糕的,維護(hù)麻煩,復(fù)用不可能,也缺乏靈活性。如果一個類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合起來,一個職責(zé)變化可能會削弱或者抑制這個類完成其他職責(zé)的能力。這種耦合會導(dǎo)致脆弱的設(shè)計,當(dāng)變化發(fā)生時,設(shè)計會遭到很多意想不到的破壞。
3、依賴倒轉(zhuǎn)原則
概念:依賴倒轉(zhuǎn)原則是程序要依賴于抽象接口,不要依賴于具體實(shí)現(xiàn)。簡單的來說就是要求對抽象進(jìn)行編程,不要對實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊的耦合。
有時候?yàn)榱舜a復(fù)用,一般會把常用的代碼寫成函數(shù)或類庫。這樣開發(fā)新項(xiàng)目的時候直接用就行了。比如做項(xiàng)目的時候大多要訪問數(shù)據(jù)庫,所以我們把訪問數(shù)據(jù)庫的代碼寫成了函數(shù)。每次做項(xiàng)目去調(diào)用這些函數(shù)。那么問題來了,我們要做新項(xiàng)目的時候,發(fā)現(xiàn)業(yè)務(wù)邏輯高層模塊都是一樣的,但客戶卻希望使用不同的數(shù)據(jù)庫或存儲方式,這時就出現(xiàn)了麻煩。我們希望能再次利用這些高層模塊,但是高層模塊都是與低層的訪問數(shù)據(jù)庫綁定在一起,沒辦法復(fù)用這些高層的模塊。所以不管是高層模塊和底層模塊都應(yīng)該依賴于抽象,具體一點(diǎn)就是接口或者抽象類,只要接口是穩(wěn)定的,那么任何一個更改都不用擔(dān)心。
4、迪米特法則(最小知識原則)
概念:一個軟件實(shí)體應(yīng)當(dāng)盡可能的少與其他實(shí)體發(fā)生相互作用。一個軟件單位對其他軟件單位都只有最少的知識,而且局限于那些與本單位密切相關(guān)的軟件單位。迪米特法則的初衷在于降低類之間的耦合。由于每個類盡量減少對其他類的依賴,因此,很容易使得系統(tǒng)的功能模塊功能獨(dú)立,相互之間不存在(或很少有)依賴關(guān)系。迪米特法則不希望類之間建立直接的聯(lián)系。如果有真的需要建立聯(lián)系的,也希望能通過他的友元類來轉(zhuǎn)達(dá)。因此,應(yīng)用迪米特法則有可能造成一個后果就是:系統(tǒng)中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互關(guān)系,這在一定程度上增加了系統(tǒng)的復(fù)雜度。
5、接口隔離原則
概念:客戶端不應(yīng)該依賴他不需要的接口,類間的依賴關(guān)系應(yīng)建立在最小的接口上。
接口隔離原則的核心定義,不出現(xiàn)臃腫的接口,但是“小”是有限度的,首先就是不能違反單一職責(zé)原則。
6、合成/聚合復(fù)用原則
概念:合成/聚合復(fù)用原則經(jīng)常又叫做合成復(fù)用原則,就是在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分,新的對象通過這些對象的委派達(dá)到復(fù)用已有功能的目的。他的設(shè)計原則是:要盡量使用合成/聚合,盡量不要使用繼承。
7、里氏代換原則
概念:里氏代換原則是面向?qū)ο笤O(shè)計的基本原則之一。即任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。里氏代換原則是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受影響時,基類才能被真正復(fù)用,而衍生類也能夠在積累的基礎(chǔ)上增加新的行為,里氏代換原則是對“開-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開-閉”原則的關(guān)鍵步驟就是抽象化。在基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。
當(dāng)滿足繼承的時候,父類肯定存在非私有的成員,子類肯定是得到了父類的這些非私有成員(假設(shè),父類的成員全部是私有的,那么子類沒辦法從父類繼承任何成員,也就不存在繼承的概念了)。既然子類繼承了父類的這些非私有成員,那么子類對象也就可以在父類對象中調(diào)用這些非私有成員。所以,子類對象可以替換父類對象的位置。
在里氏帶環(huán)原則下,當(dāng)需求有變化時,只需繼承,而別的東西不會改變。由于里氏代換原則才使得開放封閉稱為可能。這樣使得子類在父類無需修改的情況下就可以擴(kuò)展。
總結(jié)
以上是生活随笔為你收集整理的设计模式(面向对象)设计的七大原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LInux线程——多线程与fork之间的
- 下一篇: 什么是设计模式