軟體架構設計原則之介面隔離原則
阿新 • • 發佈:2021-10-24
介面隔離原則(Interface Segregation Principle, ISP)是指用多個專門的介面,而不使用單一的總介面,客戶端不應該依賴它不需要的介面。這個原則指導我們在設計介面時應當注意以下幾點:
(1)一個類對另一個類的依賴應該建立在最小的介面之上。
(2)建立單一介面,不要建立龐大臃腫的介面。
(3)儘量細化介面,介面中的方法儘量少(不是越少越好,一定要適度)。
介面隔離原則符合我們常說的高內聚、低耦合的設計思想,可以使類具有很好的可讀性、可擴充套件性和可維護性。我們在設計介面的時候,要多花時間去思考,要考慮業務模型,包括對以後有可能發生變更的地方還要做一些預判。所以,對於抽象、對於業務模型的理解是非常重要的。下面我們來看一段程式碼,對一個動物行為進行抽象描述。
IAnimal介面的程式碼如下:
public interfaceIAnimal {
voideat();
voidfly();
voidswim();
}
Bird類的程式碼如下:
public classBird implementsIAnimal {
@Override
public voideat() {}
@Override
public voidfly() {}
@Override
public voidswim() {}
}
Dog類的程式碼如下:
public classDog implementsIAnimal { @Override public voideat() {} @Override public voidfly() {} @Override public voidswim() {} }
可以看出,Bird的swim()方法可能只能空著,但Dog的fly()方法顯然是不可能的。這時候,我們針對不同動物行為來設計不同的介面,分別設計IEatAnimal、IFlyAnimal和ISwimAnimal介面,來看程式碼。
IEatAnimal介面的程式碼如下:
public interfaceIEatAnimal {
voideat();
}
IFlyAnimal介面的程式碼如下:
public interfaceIFlyAnimal {
voidfly();
}
ISwimAnimal介面的程式碼如下:
public interfaceISwimAnimal { voidswim(); }
Dog只實現IEatAnimal和ISwimAnimal介面,程式碼如下:
public classDog implementsISwimAnimal,IEatAnimal {
@Override
public voideat() {}
@Override
public voidswim() {}
}
來看一下兩種類圖的對比,如下圖所示,還是非常清晰明瞭的。
本文為“Tom彈架構”原創,轉載請註明出處。技術在於分享,我分享我快樂!
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注微信公眾號“Tom彈架構”可獲取更多技術乾貨!