《游戲編程模式》筆記——觀察者模式
觀察者模式是一種行為型設(shè)計(jì)模式。
當(dāng)被觀察者發(fā)生特定的變化時(shí),所有觀察者都會(huì)收到通知并自動(dòng)處理。
主要目的是解耦。
例如,角色升級(jí)時(shí),我們可以直接在玩家身上的代碼里去調(diào)用音頻系統(tǒng)播放一個(gè)升級(jí)音效,調(diào)用UI系統(tǒng)顯示升級(jí)界面,調(diào)用成就系統(tǒng)記錄玩家等級(jí)等。
這么看,似乎也還行,也能滿足目前的需求。若是再有需要升級(jí)時(shí)觸發(fā)的,比如解鎖新的功能,解鎖新的任務(wù),商店追加新的可購(gòu)買道具,觸發(fā)一個(gè)限時(shí)禮包等,我們又要在后面繼續(xù)堆各個(gè)系統(tǒng)的調(diào)用代碼。代碼量上去后,改動(dòng)起來(lái)可能就會(huì)牽一發(fā)而動(dòng)全身。
使用觀察者模式的話,只需要在玩家升級(jí)的時(shí)候去通知所有觀察者告訴他們現(xiàn)在玩家的等級(jí)就行了。
我們可以在玩家的代碼中添加一個(gè)升級(jí)事件,所有需要監(jiān)聽玩家是否升級(jí)的觀察者都通過(guò)AddListener函數(shù)把自己的函數(shù)加進(jìn)來(lái),玩家升級(jí)后觸發(fā)升級(jí)事件,所有的觀察者都會(huì)開始做對(duì)應(yīng)的處理。
如果被觀察者是單例類,事件變量和添加刪除監(jiān)聽的函數(shù)就可以不用?static?修飾。
觀察者需要在自己生命周期開始的時(shí)候去監(jiān)聽事件,在生命周期結(jié)束的時(shí)候取消監(jiān)聽。
如此一來(lái),便完成了一個(gè)簡(jiǎn)單的觀察者模式。
參考
《游戲編程模式》