接口隔離的接口是什么
- 實(shí)例接口:在Java中申明的一個(gè)類,使用new關(guān)鍵字創(chuàng)建的對(duì)象。
- 類接口:Java中使用interface關(guān)鍵字定義的接口。
什么是接口隔離原則
建立單一接口,不需要龐大臃腫的接口,盡量細(xì)化接口,同時(shí)接口的方法盡量的少。
生活上的例子
我們出去的旅游的時(shí)候,肯定會(huì)去住酒店,那么在前臺(tái)登記完成之后,你會(huì)拿到一把鑰匙,這個(gè)鑰匙只能打開你預(yù)定房間的門。假如前臺(tái)給你的不是一把鑰匙,而是一串酒店所有的鑰匙,雖然你任能夠打開自己預(yù)定的房間,但是你也可以打開其他的房間啊,這個(gè)時(shí)候,你是不是覺得可以干點(diǎn)壞事了呢?哈哈,不過現(xiàn)實(shí)是遵守接口隔離原則的,我只提供你能夠訪問的。
在使用第三方SDK的時(shí)候,他們提供給你接口,基本上都是符合這個(gè)原則,你只能夠調(diào)用他提供給你的api,其他你是沒有訪問權(quán)限的(反射除外),當(dāng)然如果你自己的寫SDK的時(shí)候,也要遵守這個(gè)原則,防止使用SDK的開發(fā)者調(diào)用了本不應(yīng)該開放的接口。
單一職責(zé)和接口隔離
單一職責(zé)原則講的是實(shí)現(xiàn)時(shí)的職責(zé)分離,實(shí)現(xiàn)類需要實(shí)現(xiàn)該職責(zé)的所有方法。
接口隔離原則講的是設(shè)計(jì)時(shí)的架構(gòu)分離,限制實(shí)現(xiàn)類,避免實(shí)現(xiàn)類實(shí)現(xiàn)不需要實(shí)現(xiàn)的方法,同時(shí)也限制外部類訪問的范圍,但是必須符合單一職責(zé)原則。
舉個(gè)例子:
//書的管理類
interface BookDbManager{
public Book queryBookByName(String name);
public void deleteBookByName(String name);
public Cursor queryBook(String sql);
public void deleteBook(String sql);
}
看看上面的接口,他只是處理Book管理的工作,可以說是符合單一職責(zé)原則的,加入限制有兩種身份的人需要使用查詢和刪除Book的功能,一個(gè)是管理員,一個(gè)是普通用戶,你會(huì)直接把BookDbManager都給他們使用嗎?很顯然是不行的,普通用戶不見得會(huì)使用sql語句,當(dāng)然也不能給他使用sql語句,因?yàn)檫@個(gè)里面有很大的風(fēng)險(xiǎn),所以咱們必須根據(jù)身份重新定義新的接口。
//管理員訪問的接口
interface AdminBookDbManager{
public Cursor queryBook(String sql);
public void deleteBook(String sql);
}
//用戶訪問的接口
interface UserBookDbManager{
public Book queryBookByName(String name);
public void deleteBookByName(String name);
}
通過接口隔離原則,有效的隔離不同用戶身份訪問的權(quán)限,并且符合單一職責(zé)原則。