SOLID 設計原則 – 介面隔離原則(ISP)

本文介紹S.O.L.I.D原則中的介面隔離原則(Interface Segregation Principle,縮寫為ISP)。

該原則主旨為與其建造一個龐大擁腫的介面(interface),不如改成為數個小型介面,方便開耦合和重構。

Too many is better than too few

舉個例子來說,你有[Animal]介面,動物會做

[吃],[動],[睡]

This image has an empty alt attribute; its file name is ISP01-1.png

圖上IAnimal介面包含三個動作可作用於所有動物例如熊,虎,象等等。但如果有一個Plant(植物)類別要繼承此IAnimal介面,則IAnimal大部份的行為並不符合Plant,所以並不適用。

試想我們換成另外一個情境。我們將IAnimal拆成三個小型介面(eat, move, sleep)。植物(Plant)雖然不會[動]也不會[睡],但會消耗能源和排放氧氣,所以吃(eat)動作是可以作用於[Plant]植物類別上的。

This image has an empty alt attribute; its file name is ISP02.png

此例子顯示輕小型的介面比起巨型的介面(interface)更具有擴充性和可用性。反觀如果[Plant]繼承了IAnimal介面需要實作太多沒有必要的方法,且會需要修改很多的程式碼。