話說(shuō)現(xiàn)在的年輕人,很多人每天最困難的的問(wèn)題是下一頓什么,在哪里吃。作為一個(gè)苦逼上班族,食堂飯菜實(shí)在是吃膩了。于是乎,今天和一個(gè)同事上午不約而同叫了同一家外賣(mài),到了中午吃飯的時(shí)間,快遞小哥準(zhǔn)時(shí)送來(lái),我難得吃到了一點(diǎn)跟平常不一樣的口味。我表示現(xiàn)在還在心疼自己的錢(qián)包...
進(jìn)入正題
觀察者模式概述
觀察者模式定義了一種一對(duì)多的依賴(lài)關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己。好吧,這個(gè)概念這沒(méi)什么意思,網(wǎng)上一搜一大把,都大同小異,不多說(shuō)了。
觀察者模式的模型
抽象主題(Subject)角色:抽象主題角色把所有對(duì)觀察者對(duì)象的引用保存在一個(gè)聚集(比如ArrayList對(duì)象)里,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象,抽象主題角色又叫做抽象被觀察者(Observable)角色。
具體主題(ConcreteSubject)角色:將有關(guān)狀態(tài)存入具體觀察者對(duì)象;在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過(guò)的觀察者發(fā)出通知。具體主題角色又叫做具體被觀察者(Concrete Observable)角色。
抽象觀察者(Observer)角色:為所有的具體觀察者定義一個(gè)接口,在得到主題的通知時(shí)更新自己,這個(gè)接口叫做更新接口。
具體觀察者(Con