Java的API中有兩組接口類(lèi)是用來(lái)寫(xiě)觀察者模式用的,分別是java.util.Observable、java.util.Observer和java.util.EventListener、Java.util.EventObject。本文并沒(méi)有直接使用到這些API,而是自定義一套觀察者模式中相關(guān)的接口類(lèi),且選取一個(gè)日常生活中常見(jiàn)的一個(gè)事件來(lái)說(shuō)明觀察者模式的使用。
現(xiàn)實(shí)場(chǎng)景:有一名店(Shop),為了財(cái)物安全起見(jiàn),除了在店內(nèi)裝了攝像頭(Camera)來(lái)監(jiān)控店內(nèi)的總?cè)藬?shù)外,還聘請(qǐng)了一些門(mén)衛(wèi)(Camera)守在店門(mén)口,對(duì)來(lái)訪的客人進(jìn)行實(shí)名登記,即客人進(jìn)入時(shí)要記名,客人出店時(shí)也要記錄其離去。
//Watcher接口:


















//Watchable類(lèi):










































//Shop類(lèi),繼承了Watchable類(lèi),Shop內(nèi)有什么動(dòng)靜,會(huì)通過(guò)調(diào)用父類(lèi)的notifyWatcher()方法通知觀察者。







































//Guard(門(mén)衛(wèi)類(lèi))和Camera(攝像頭類(lèi))都屬于本例中的觀察者,負(fù)責(zé)觀察店內(nèi)外的動(dòng)靜,




















































//測(cè)試類(lèi)代碼:










































運(yùn)行測(cè)試類(lèi),結(jié)果如下:

2

3

4

5

6

7

8

9

10

11

12

13

本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)