一. 單一職責(zé)原則
Single Responsibility Principle, 簡(jiǎn)稱SRP。
定義
There should never be more than one reason for a class to change應(yīng)該有且僅有一個(gè)原因引起類的變
準(zhǔn)則
職責(zé)的劃分?單一的定義和級(jí)別?
應(yīng)該根據(jù)實(shí)際業(yè)務(wù)情況而定。關(guān)注變化點(diǎn)。
實(shí)際使用時(shí),類很難做到職責(zé)單一,但是接口的職責(zé)應(yīng)該盡量單一。
二. 里氏替換原則
Liskov Substitution Principle, 簡(jiǎn)稱LSP。
定義
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it所有引用基類的地方必須能透明地使用其子類的對(duì)象
準(zhǔn)則
里氏替換原則為良好的繼承定義了一個(gè)規(guī)范:
子類必須完全實(shí)現(xiàn)父類的方法
子類可以有自己的個(gè)性(屬性和方法)。
覆蓋或?qū)崿F(xiàn)父類的方法時(shí)輸入?yún)?shù)可以被放大。
覆寫或?qū)崿F(xiàn)父類的方法時(shí)輸出結(jié)果可以被縮小。
注:在類中調(diào)用其他類時(shí)務(wù)必要使用父類或接口,如果不能使用父類或接口,則說(shuō)明類的設(shè)計(jì)已經(jīng)違背了LSP原則。
三. 依賴倒置原則
Dependence Inversion Principle, 簡(jiǎn)稱DIP
定義
High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
翻譯過(guò)來(lái),包含三層含義:
高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象
抽象不應(yīng)該依賴細(xì)節(jié)。
細(xì)節(jié)應(yīng)該依賴抽象。
精簡(jiǎn)的定義: 面向接口編程。
案例
Test-Driven Development 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是依賴倒置原則的最好體現(xiàn)。
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)要求先寫測(cè)試類,測(cè)試通過(guò)才寫實(shí)現(xiàn)類,這就要求你要先想接口定義。
依賴的三種寫法:
構(gòu)造函數(shù)傳遞依賴對(duì)象。
Setter方法傳遞依賴對(duì)象。
接口聲明依賴對(duì)象。
最佳實(shí)踐:
每個(gè)類盡量都有接口或抽象類,或者抽象類和接口兩者都具備。變量的表面類型盡量是接口或抽象類。任何類都不應(yīng)該從具體類派生。盡量不要覆寫基類的方法。結(jié)合里氏替換原則使用。
四. 接口隔離原則:
接口這里指用interface關(guān)鍵字定義的接口。
定義:
Clients should not be forced to depend upon interfaces that they don’t use.(客戶端不應(yīng)該依賴它不需要的接口)The dependency of one class to anther one should depend on the smallest possible interface.(類間的依賴關(guān)系應(yīng)該建立在最小的接口上)概括:建立單一接口,不要建立臃腫龐大的接口。
通俗來(lái)講:接口盡量細(xì)化,同時(shí)接口中的方法盡量少。
準(zhǔn)則
如何細(xì)化?細(xì)化到什么程序?
沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),應(yīng)根據(jù)業(yè)務(wù)合理細(xì)分,適合業(yè)務(wù)才是重點(diǎn)。
保證接口的純結(jié)性:
接口要盡量小。接口要高內(nèi)聚。定制服務(wù)。接口的設(shè)計(jì)是有限度的。
最佳實(shí)踐:
一個(gè)接口只服務(wù)于一個(gè)子模塊或業(yè)務(wù)邏輯。通過(guò)業(yè)務(wù)邏輯壓縮接口中的public方法,接口時(shí)常去回顧,盡量讓接口達(dá)到“滿身筋骨肉”,而不是“肥嘟嘟”的一大堆方法。已經(jīng)被污染了的接口,盡量去修改,若變更的風(fēng)險(xiǎn)較大,則采用適配器模式進(jìn)行轉(zhuǎn)化處理。了解環(huán)境,拒絕盲從。每個(gè)項(xiàng)目或產(chǎn)品都有特定的環(huán)境因素,不要盲從大師的設(shè)計(jì),要根據(jù)業(yè)務(wù)邏輯進(jìn)行最好的接口設(shè)計(jì)。
五.迪米特法則
Law of Demeter, LOD。又稱最少知識(shí)原則(Least Knowledge Principle, LKP)。
定義:
一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。
準(zhǔn)則:
通俗來(lái)講:一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,你(被耦合或調(diào)用的類)的內(nèi)部是如何復(fù)雜都和我沒(méi)有關(guān)系,那是你的事情,我就調(diào)用你提供的public方法,其他一概不關(guān)心。
低耦合要求:
只和朋友交流
朋友類:出現(xiàn)在成員變量、方法的輸入輸出參數(shù)中的類。方法體內(nèi)部的類不屬于朋友類。
朋友間也是有距離的
迪米特法則要求類“羞澀”一點(diǎn),盡量不要對(duì)外公布太多的public方法和非靜態(tài)的public變量,盡量?jī)?nèi)斂,多使用private、package-private、protected等訪問(wèn)權(quán)限。
是自己的就是自己的
如果一個(gè)方法放在本類中,既不增加類間關(guān)系,也對(duì)本類不產(chǎn)生負(fù)面影響,就放置在本類中。
謹(jǐn)慎使用Serializable
六.開(kāi)閉原則
定義:
Software entities like classes, modules and functions should be open for extension but closed for modifications.一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉
準(zhǔn)則:
軟件實(shí)體包括以下幾個(gè)部分:
項(xiàng)目和軟件產(chǎn)品中按照一定的邏輯規(guī)則劃分的模塊。抽象和類。方法。變化的三種類型:
邏輯變化子模塊變化可見(jiàn)視圖變化
-
接口設(shè)計(jì)
+關(guān)注
關(guān)注
2文章
197瀏覽量
30214 -
DIP
+關(guān)注
關(guān)注
0文章
246瀏覽量
30827 -
LSP
+關(guān)注
關(guān)注
0文章
13瀏覽量
9952
原文標(biāo)題:接口設(shè)計(jì)六大原則
文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
軟件測(cè)試的7大原則,你漏了幾條?
如何選擇IDC服務(wù)商十大原則
Python設(shè)計(jì)模式六大原則
三大原則,讓你選對(duì)繼電器
接口設(shè)計(jì)的6大原則,你都知道嗎?
什么是設(shè)計(jì)模式?為什么要學(xué)習(xí)設(shè)計(jì)模式
電路布線的基本六大原則
設(shè)計(jì)模式的原則及實(shí)現(xiàn)代碼的復(fù)用
JAVA設(shè)計(jì)模式六大原則

一文匯總PCB電路設(shè)計(jì)的六大原則

制造業(yè)組裝線設(shè)計(jì)必須要納入的五大原則?
設(shè)計(jì)模式(1)—什么是設(shè)計(jì)模式?設(shè)計(jì)模式的六大原則是什么?

評(píng)論