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