接口分為兩種:
- 實例接口(Object Interface)雹锣,在Java中聲明一個類愧怜,然后用
new
關(guān)鍵詞產(chǎn)生一個實例盲链,它是對一個類型的事物的描述拙毫,這是一種接口依许,比如你定義Person這個類,然后使用Person zhangSan = new Person()
產(chǎn)生了一個實例缀蹄,這個實例要遵從的標準就是Person這個類峭跳,Person類就是zhangSan的接口,類也是一種接口
缺前。 - 類接口(Class Interface)蛀醉,Java中經(jīng)常使用
interface
關(guān)鍵詞字義的接口。
接口隔離原則(ISP)的定義:
- 客戶端不應(yīng)該依賴它不需要的接口衅码。
- 類間的依賴關(guān)系應(yīng)該建立在最小的接口上拯刁。
建立單一接口,不要建立臃腫龐大的接口逝段。接口盡量細化垛玻,同時接口中的方法盡量少。
接口隔離原則是對接口進行規(guī)范約束奶躯,其包含以下4層含義:
- 接口要盡量小
根據(jù)接口隔離原則拆分接口時帚桩,首先必須滿足單一職責原則。 - 接口要高內(nèi)聚
高內(nèi)聚就是提高接口巫糙、類、模塊的處理能力颊乘,減少對外的交互参淹。要求在接口中盡量少公布public
方法,接口是對外的承諾乏悄,承諾越少對系統(tǒng)的開發(fā)越有利浙值,變更的風(fēng)險也就越少,同時也有利于降低成本檩小。 - 定制服務(wù)
一個系統(tǒng)或系統(tǒng)內(nèi)的模塊之間必然會有耦合开呐,有耦合就要有相互訪問的接口(并不一定就是Java中定義的Interface,也可能是一個類或單純的數(shù)據(jù)交換),我們設(shè)計時就需要為各個訪問者定制服務(wù)筐付。定制服務(wù)就是單獨為一個個體提供優(yōu)良的服務(wù)卵惦。我們在做系統(tǒng)設(shè)計時也需要考慮對系統(tǒng)之間或模塊之間的接口采用定制服務(wù)。采用定制服務(wù)就必然要有一個要求:只提供給訪問者需要的方法瓦戚。 - 接口設(shè)計是有限度的
接口的設(shè)計粒度越小沮尿,系統(tǒng)越靈活,這是不爭的事實较解。但是畜疾,靈活的同時也帶來了結(jié)構(gòu)的復(fù)雜化,開發(fā)難度增加印衔,可維護性降低啡捶。所以接口設(shè)計一定要注意適度。
接口隔離原則是對接口的定義奸焙,同時也是對類的定義瞎暑,接口和類盡量使用原子接口或原子類來組裝。但是忿偷,這個原子該怎么劃分是設(shè)計模式中的一大難題金顿,在實踐中可以根據(jù)以下幾個規(guī)則來衡量:
- 一個接口只服務(wù)于一個子模塊或業(yè)務(wù)邏輯。
- 通過業(yè)務(wù)邏輯壓縮接口中的
public
方法鲤桥,接口時常去回顧揍拆,盡量讓接口達到最小。 - 已經(jīng)被們污染了的接口茶凳,盡量去修改嫂拴,若變更的風(fēng)險較大,則采用適配器模式進行轉(zhuǎn)化處理贮喧。
- 了解環(huán)境筒狠,拒絕肓從箱沦。每個項目或產(chǎn)品都有特定的環(huán)境因素,環(huán)境不同谓形,接口拆分的標準就不同灶伊。