iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
Modern Web

JS Design Pattern 系列 第 26

JS Design Pattern Day26-介面導向程式設計

第26天。最近剛好想看的電影要再一個禮拜後會上映,剛好上個月訂的遊戲也在一個禮拜後才會寄送到,真是愉悅的煎熬。

今天看一下 介面導向程式設計

介面導向算是物件導向程式設計中一種設計思想,我們可以先來探討介面的意義。介面在物件導向語言中介面定義了類別所應該有的規則或是能力。像是只要是動物就都會叫或是人類就會說早安之類的法則。程式中實際用起來就會之前所練習的動物叫聲範例一樣,我們會先定義好動物會叫這個規則。在系統分析和架構中,介面導向設計幫助我們分清層次和依賴關係,物件之間利用介面來規定展露出來的功能。

在其他靜態語言中,他們提供相關的語法功能來幫助我們完成介面,例如JAVA的抽象類別或是interface功能。在JS語言中,我們某種程度上其實不太需要這樣類型的功能(靜態語言與動態語言的差異),但我們在實作介面設計時仍要檢查程式碼規則,像是檢查某個物件是否有實作某個方法,或是檢查傳入參數型態:

function show(obj) {
    obj.show();//定義了規則:物件必須要有show方法
}

var myObj = {};
show(myObj);//傳入的物件並沒有show方法,因此會出錯

var myObj1 = {
    show: 1
}; 
show(myObj1);//或是傳入的show不是一個function

因此,我們必須加上一些檢查的方法,修改show介面方法

function show(obj) {
    if (obj && typeof(obj.show) === 'function') {
        obj.show();
    }
}

在其他靜態語言中,可以利用編譯器除錯,但JS顯然無法,我們可以利用鴨子類型(Ducking Type)進行介面檢查:
“如果它走起路像鴨子,叫聲像鴨子,那麼他就是鴨子”(參考https://ithelp.ithome.com.tw/articles/10204797裡面最後類型檢查的地方)

若你覺得在開發中總是進行介面檢查這件事令你厭煩,或許你可以試試TypeScript語言,TypeScript提供了interface功能,若在類別中忘記實作某些介面定義好的方法時,TypeScript編譯器就會有錯誤提示。


上一篇
JS Design Pattern Day25-開放-封閉原則 OCP(下)
下一篇
JS Design Pattern Day27-重構(上)
系列文
JS Design Pattern 30

尚未有邦友留言

立即登入留言