《游戏编程模式》读书笔记之一
生活随笔
收集整理的這篇文章主要介紹了
《游戏编程模式》读书笔记之一
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
觀察者模式
一、需要注意的地方
同步、異步
(1)對(duì)事件同步響應(yīng),被觀察者有可能會(huì)阻塞(2)對(duì)事件異步響應(yīng),如果觀察者試圖獲得被觀察者的鎖,游戲就進(jìn)入死鎖。要使用事件隊(duì)列來(lái)做異步通信
動(dòng)態(tài)分配內(nèi)存
(1)觀察者列表的添加和刪除,需要?jiǎng)討B(tài)分配內(nèi)存。 (2)使用鏈?zhǔn)接^察者,無(wú)需動(dòng)態(tài)分配內(nèi)存。當(dāng)觀察者接到通知,它返回了一個(gè)標(biāo)識(shí),表明被觀察者是否應(yīng)該繼續(xù)遍歷觀察者列表。這涉及到職責(zé)鏈模式銷(xiāo)毀被觀察者、觀察者(云式原則:有始有終原則)
銷(xiāo)毀被觀察者,需要讓觀察者接收到一個(gè)“死亡通知”,自動(dòng)取消注冊(cè) 維基百科有個(gè)專(zhuān)門(mén)的名字:失效監(jiān)聽(tīng)者問(wèn)題二、時(shí)代在變
觀察者模式在面向?qū)ο缶幊讨写笮衅涞?#xff08;Java中的java.util.Observer、C#中的delegate/event),但沉重而且死板。 例如:觀察者只有一個(gè)OnNotify()方法,觀察者監(jiān)聽(tīng)多個(gè)被觀察者,它不能為不同的被觀察者調(diào)用不同的通知方法 作者的觀點(diǎn): (1)C++克服了在沒(méi)有垃圾回收語(yǔ)言構(gòu)建閉包的弱點(diǎn),甚至Java在JDK8中引入了閉包。(作者非常青睞C++,我也想學(xué)) (2)傾向于注冊(cè)一個(gè)成員函數(shù)指針作為觀察者,而不是Observer接口的實(shí)例原型模式
完全沒(méi)看懂,作者很叼,我需要努力。單例模式(避免使用)
優(yōu)點(diǎn): 全局唯一,需要時(shí)再創(chuàng)建實(shí)例,可繼承 缺點(diǎn): (1)由于全局變量,到處被引用,促進(jìn)耦合,代碼理解困難(例如日志類(lèi)) (2)每個(gè)線程都能訪問(wèn),卻不知道其他線程是否正在使用,導(dǎo)致競(jìng)爭(zhēng)、死鎖。 (3)惰性初始化可能發(fā)生在游戲的性能高峰期,無(wú)法控制總結(jié):
(1)單例類(lèi)有時(shí)候并不需要,非要裝逼??梢允褂没?lèi)、靜態(tài)函數(shù)等 (2)使用單例,但不一定是全局訪問(wèn)(子類(lèi)沙箱模式) PS. ? ?惰性初始化要注意多線程問(wèn)題狀態(tài)模式
單獨(dú)寫(xiě)了一篇文章轉(zhuǎn)載于:https://www.cnblogs.com/fuyunzzy/p/7456346.html
總結(jié)
以上是生活随笔為你收集整理的《游戏编程模式》读书笔记之一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 李善友《认知升级之第一性原理》--507
- 下一篇: 在git中出现中文乱码的解决方案