Chapter2: 觀察者模式 (Observer Pattern)
Last updated
Last updated
1.Observer Pattern
2.Observer Pattern Example: ItemController
觀察者模式要解決的問題:
1.資料使用者或資料顯示者必須定期去取得最新資料, 而不是資料更新時通知更新
2.實作上, 每當有新的項目要取得就必須改寫code
3.實作上, 是針對具體物件實踐而不是介面
4.在runtime時也無法新增或移除顯示項目
因此要如何解決以上問題呢? 就是利用觀察者模式
主題 + 觀察者 = 觀察者模式 (以下圖片引用<深入淺出設計模式>)
每當觀察者所定閱的主題有更新, 觀察者就會收到該物鍵的最新狀態
當主題更新時觀察者們都會被通知, 彼此之間是被訂閱者與訂閱者的關係, 也就是說當被訂閱者改變狀態,其他訂閱者都會收到通知並自動被更新
一旦訂閱者解除訂閱便不會再收到通知
示意圖如下 (以下圖片引用<深入淺出設計模式>)
角色(以下圖片引用<深入淺出設計模式>)
主題物件 (Subject): 須實作以下功能
registerOberver()
removeOberver()
notifyOberver()
觀察者 (Observer): 須實作以下功能
update()
觀察者模式的優點
1.們可在任何時間加入觀察者
2.當加入/移除觀察者時不需要修改主題物件
3.主題物件及觀察者皆是可以被重複使用的
4.主題物件及觀察者的改變皆不會影響到彼此
2.Observer Pattern Example: ItemController
1.需求
ItemController是MOXA Auto E-test Program的一環
如下圖所示, ItemController為整個program的stage 1
為滿足產品開發時的功能測試,stage 1要能達到以下的需求:
1.可以遠端測試機器 (remote control)
2.可以讓使用者編輯/擴充test case
3.可以排程, 依序進行每個test case
4.server端及client端皆可以產生簡單的test report並回傳
2.軟體架構設計
ItemController的設計, 會在每一個test case的測試上都會喚起server, client
server, client即是Subject Object, 每一次test case的測試結束後所產生的report將會傳送給Observers
因此架構中
有一個IUser
Server, Client必須implement IUser
有一個IOberver
Observer必須implement IObserver
3.程式碼解析
當程式一執行, 會create Server, Client兩個物件, 並將TestItem.ini裡面所記載的觀察者名單依序註冊
IOberser
}
IUser
}