設(shè)計(jì)模式3:面對(duì)對(duì)象設(shè)計(jì)七大原則

1.開(kāi)閉原則(open close principle)

定義:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。

當(dāng)應(yīng)用需求改變時(shí),在不修改軟件實(shí)體的源代碼或者二進(jìn)制的前提下,可以擴(kuò)展該模塊的功能,以滿(mǎn)足新的需求。

方法:抽象約束,封裝變化

通過(guò)接口或者抽象類(lèi)定義相對(duì)穩(wěn)定的抽象層,而將相同的可變因素封裝在相同的具體實(shí)現(xiàn)類(lèi)中。

2.里氏代換原則(liskov substitution principle LSP)

定義:繼承的原則—繼承必須確保超類(lèi)所擁有的性質(zhì)在子類(lèi)中仍然成立。任何基類(lèi)可以出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)。

方法:子類(lèi)可以擴(kuò)展父類(lèi)的功能,但不能改變父類(lèi)原有的功能。即盡量不要重寫(xiě)父類(lèi)的方法。

1.子類(lèi)可以實(shí)現(xiàn)父類(lèi)的抽象方法,但不能覆蓋父類(lèi)的非抽象方法

2.子類(lèi)中可以增加自己特有的方法

3.當(dāng)子類(lèi)的方法重載父類(lèi)的方法時(shí),方法的前置條件(即方法的輸入?yún)?shù))要比父類(lèi)的方法更寬松

4.當(dāng)子類(lèi)的方法實(shí)現(xiàn)父類(lèi)的方法時(shí),方法的后置條件(即方法的返回值)要比父類(lèi)的方法更嚴(yán)格或相等

3.依賴(lài)倒置原則(dependence inversion principle)

定義:高層模塊不應(yīng)該依賴(lài)低層模塊,兩者都應(yīng)該依賴(lài)其抽象;抽象不應(yīng)該依賴(lài)細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴(lài)抽象。核心思想表現(xiàn)為:面向接口編程,依賴(lài)于抽象而不依賴(lài)于具體

方法:面向接口編程

1.每個(gè)類(lèi)盡量提供接口或者抽象類(lèi),或者兩者都具備

2.變量的生命類(lèi)型盡量是接口或者是抽象類(lèi)。

3.任何類(lèi)都不應(yīng)該從具體類(lèi)派生。

4.使用繼承時(shí)盡量遵循里氏替換原則

4.單一職責(zé)原則(single responsibility principle)

定義:規(guī)定一個(gè)類(lèi)應(yīng)該有且僅有一個(gè)引起它變化的原因。它要求控制類(lèi)的粒度大小,將對(duì)象解耦,提高其內(nèi)聚性。

單一職責(zé)原則同樣適用于方法。一個(gè)方法應(yīng)盡可能做好一件事情。

5.接口隔離原則(interface segregation principle)

定義:將臃腫龐大的接口拆分成更小和更具體的接口。任何類(lèi)不應(yīng)該被迫依賴(lài)于它不使用的方法。

實(shí)現(xiàn):為各個(gè)類(lèi)建立他們需要的專(zhuān)用接口,不要試圖建立一個(gè)龐大的接口供所有依賴(lài)它的類(lèi)去調(diào)用。

1.接口盡量小,但是要有限度。一個(gè)接口只服務(wù)于一個(gè)子模塊或者業(yè)務(wù)邏輯。

2.為依賴(lài)接口的類(lèi)定制服務(wù)。只提供調(diào)用者需要的方法,屏蔽不需要的方法。

3.提高內(nèi)聚,減少對(duì)外交互。使接口用最少的方法完成最多的事情。

6.迪米特法則(最少知道原則)(demeter principle)

定義:只與你的直接朋友交談,不跟陌生人說(shuō)話(huà)。一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生直接的相互作用,可以通過(guò)第三方轉(zhuǎn)發(fā)該調(diào)用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。

一個(gè)對(duì)象應(yīng)該對(duì)其它對(duì)象保持最少的了解。

1.從依賴(lài)著的角度來(lái)說(shuō),只依賴(lài)應(yīng)該依賴(lài)的對(duì)象

2.從被依賴(lài)的角度來(lái)說(shuō),只暴露應(yīng)該暴露的方法。

7.合成復(fù)用原則(composite reuse principle)

定義:復(fù)用時(shí),盡量使用組合、聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn),而不是使用繼承。

繼承復(fù)用破壞了類(lèi)的封裝行。因?yàn)槔^承會(huì)將父類(lèi)的實(shí)現(xiàn)細(xì)節(jié)暴露給子類(lèi),父類(lèi)對(duì)子類(lèi)是透明的,所以這種復(fù)用又稱(chēng)為“白箱”復(fù)用。耦合度高,限制了復(fù)用的靈活性。

方法:將已有的對(duì)象納入新對(duì)象中,作為新對(duì)象的成員對(duì)象來(lái)實(shí)現(xiàn)。新對(duì)象可以調(diào)用已有對(duì)象的功能,從而達(dá)到復(fù)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容