iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

文章同步於blog

介紹

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

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

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

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

實作

這次我用PHP實作

interface Pet {
    public function speak();
    public function cleanLitterBox();
}

class Cat implements Pet {
    public function speak() {
        echo "喵喵\n";
    }
    
    public function cleanLitterBox() {
        echo "不要亂看,我在上廁所!\n";
    }
}

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

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

interface Pet {
    public function speak();
}

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

結語

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

參考資料

Clean Architecture(ch.10)


上一篇
【Day-8】SOLID - 里式替換原則(LSP)
下一篇
【Day-10】依賴反向原則(DIP)
系列文
軟體開發 - 程式不是會跑就好30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
neroal
iT邦新手 5 級 ‧ 2024-05-20 16:27:34

程式範例有個小錯誤,介面宣告是cleanLitterBox,但是類別實作卻是diggingLitterBox

感謝,已修正程式碼。

我要留言

立即登入留言