testresult擔任發布者角色,擁有protected listflisteners;擔任觀察者角色
以下都是testresult類原始碼
/*** registers a testlistener觀察者註冊
*/public synchronized void addlistener(testlistener listener)
/*** unregisters a testlistener觀察者移除
*/public synchronized void removelistener(testlistener listener)
*因為listeners始終指向同一組物件,為了防止執行緒問題,加上了synchronized標識,每次測試使用一組copy
* returns a copy of the listeners.
*/private synchronized listclonelisteners()
*執行testcase
* runs a testcase.
*/protected void run(final testcase test)
};runprotected(test, p);
endtest(test);//通知觀察者改變狀態
}*通知觀察者改變狀態(測試開始)
* informs the result that a test will be started.
*/public void starttest(test test)
for (testlistener each : clonelisteners())
each.starttest(test);//每個listener呼叫starttest方法
}*通知觀察者改變狀態(測試結束)
* informs the result that a test was completed.
*/public void endtest(test test)
*實際執行testcase
* runs a testcase.
*/public void runprotected(final test test, protectable p)
catch (assertionfailederror e)
catch (threaddeath e)
catch (throwable e)
}*在實際執行testcase中出現assert異常,則通知觀察者listeners
* adds a failure to the list of failures. the passed in exception
* caused the failure.
*/public synchronized void addfailure(test test, assertionfailederror t)
*在實際執行testcase中出現異常,則通知觀察者listeners
* adds an error to the list of errors. the passed in exception
* caused the error.
*/public synchronized void adderror(test test, throwable t)
觀察者模式之EventBus原始碼解析
1 觀察者模式概述 觀察者模式 observer pattern 定義物件之間的一種一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件皆得到通知並自動更新。觀察者模式的別名包括發布 訂閱 publish subscribe 模式 模型 檢視 model view 模式。觀察者模式是一種物...
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
觀察者模式
觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...