——介面隔離原則(ISP)VIP開啟更多姿勢

weixin_34208283發表於2017-09-21

介面隔離的介面是什麼


  • 例項介面:在Java中申明的一個類,使用new關鍵字建立的物件。
  • 類介面:Java中使用interface關鍵字定義的介面。

什麼是介面隔離原則


建立單一介面,不需要龐大臃腫的介面,儘量細化介面,同時介面的方法儘量的少。

生活上的例子


我們出去的旅遊的時候,肯定會去住酒店,那麼在前臺登記完成之後,你會拿到一把鑰匙,這個鑰匙只能開啟你預定房間的門。假如前臺給你的不是一把鑰匙,而是一串酒店所有的鑰匙,雖然你任能夠開啟自己預定的房間,但是你也可以開啟其他的房間啊,這個時候,你是不是覺得可以乾點壞事了呢?哈哈,不過現實是遵守介面隔離原則的,我只提供你能夠訪問的。

在使用第三方SDK的時候,他們提供給你介面,基本上都是符合這個原則,你只能夠呼叫他提供給你的api,其他你是沒有訪問許可權的(反射除外),當然如果你自己的寫SDK的時候,也要遵守這個原則,防止使用SDK的開發者呼叫了本不應該開放的介面。

單一職責和介面隔離


單一職責原則講的是實現時的職責分離,實現類需要實現該職責的所有方法。

介面隔離原則講的是設計時的架構分離,限制實現類,避免實現類實現不需要實現的方法,同時也限制外部類訪問的範圍,但是必須符合單一職責原則。

舉個例子:

//書的管理類
interface BookDbManager{
    
    public Book queryBookByName(String name);

    public void deleteBookByName(String name);

    public Cursor queryBook(String sql);

    public void deleteBook(String sql);

}

看看上面的介面,他只是處理Book管理的工作,可以說是符合單一職責原則的,加入限制有兩種身份的人需要使用查詢和刪除Book的功能,一個是管理員,一個是普通使用者,你會直接把BookDbManager都給他們使用嗎?很顯然是不行的,普通使用者不見得會使用sql語句,當然也不能給他使用sql語句,因為這個裡面有很大的風險,所以我們們必須根據身份重新定義新的介面。

//管理員訪問的介面
interface AdminBookDbManager{
    public Cursor queryBook(String sql);

    public void deleteBook(String sql);
}

//使用者訪問的介面
interface UserBookDbManager{
    public Book queryBookByName(String name);

    public void deleteBookByName(String name);
}

通過介面隔離原則,有效的隔離不同使用者身份訪問的許可權,並且符合單一職責原則。

相關文章