1. 程式人生 > 其它 >軟體架構設計原則之介面隔離原則

軟體架構設計原則之介面隔離原則

介面隔離原則(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彈架構”可獲取更多技術乾貨!