0%

【Day-9】介面隔離原則(ISP)

文章同步於it邦

介紹

今天要介紹的是介面隔離原則(ISP, Interface Segregation Principle)

ISP的原則就是,不該強迫使用者使用不需要使用的介面。

先說他與程式語言的關係
靜態型別在一開始宣告實即確定型別,像是Java必須要使用import, use, include,建立原始碼的依賴關係
而像是Python這種動態語言就不存在這種宣告,所以我可以在我需要的時候才會實做這些方法

你可能會想,沒差啊,我就寫完擺在那邊
但換個角度想,今天有可能會因為某些原因而導致,其他預料之外的問題導致需要解決,那為什麼不一開始就處理乾淨,把不需要的介面拿掉

實作

這次我用PHP實作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
interface Pet {
public function speak();
public function cleanLitterBox();
}

class Cat implements Pet {
public function speak() {
echo "喵喵\n";
}

public function diggingLitterBox() {
echo "不要亂看,我在上廁所!\n";
}
}

// 使用範例
$cat = new Cat();
$cat->speak();
$cat->cleanLitterBox();

我們先定義一個寵物的介面,假設我家的寵物有狗和貓,貓會埋貓砂,但狗(一般狀況下)不會埋貓砂
這對於我們來說,把介面實坐在裡面,可能會在未來有不可預期的問題
所以建議將Pet這個介面改成

1
2
3
interface Pet {
public function speak();
}

或是乾脆一點貓和狗的介面直接分開

結語

這章節真的滿短的,沒什麼好講的
明天就到SOLID的最後一個原則了

參考資料

Clean Architecture(ch.10)