昨天實作了簡單遙控器,今天將遙控器的展開至多個按鈕吧!
首先遙控器部分,我們把所有的按鈕用兩個陣列儲存在遙控器中,並將setCommand
時改成一次設置成對的on
、off
命令。
/*程式碼待補*/
而Command部分我們昨天已經時做過簡單的LightOn
command,其餘命令就依樣畫葫蘆,並同時實作LightOff
command。
/*程式碼待補*/
而這邊示範一個比較複雜的音響的開啟操作,我們可以把命令把對設備的一系列動作都設置在on裡完成:
/*程式碼待補*/
來測試看看設置各種不同的按鈕的遙控器吧!
/*程式碼待補*/
可以來看看將昨天的命令模式類別圖套用至這個遙控器的實作上會如何呈現:
圖1
若目前沒有足夠的command,就是有些遙控器的按鈕還沒有被定義,為了不要每次都特別寫一個檢查式:
/*程式碼待補*/
我們可以直接實作一個什麼都不做的command,並設置進去~
/*程式碼待補*/
這樣如果這顆按鈕被啟動,就不會做任何事(也不會壞掉)。這種手法,也算是一種 "類設計模式" !
NoCommand是一種null物件,null物件很適合在無法回傳有意義的物件,且不想讓用戶端處理null情況時使用。
這在實際使用中也非常常見!常常我們回傳物件若不成功會直接回傳 nullptr
,但這就造成我們的接口必須去另外寫一個檢查式if(!==nullptr)...
,否則程式會直接壞掉。因此若創建一個特殊的noCommand
物件,也是一種作法!
書中也有提及很多設計模式都有null物件,甚至有人將null object視為一種設計模式。