junit原始碼學習 觀察者模式

2021-05-22 15:01:57 字數 1639 閱讀 8572

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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...