在遊戲開發中,乙個資料層中的資料改變等事件會造成其它資料層的改變或者介面的改動。下面提供一種方法來解決這個問題。
解決思路是乙個資料層或者介面表達出對於其它資料層中的某個資料變化的興趣,當事件發生時,觸發自身的相應**。相當於是觀察者模式,解決多個物件依賴乙個物件的情況。
public inte***ce idatachangeobserver
這是設計的介面,前者是表達的是對哪個資料的哪些事件感興趣。後者是哪個資料層的哪個資料進行了觸發,並傳遞一些必要的資料。
public abstract class basemodel
public void unregisterdatachange(idatachangeobserver observer)
public void ondatachange(uint propid, params object data)
catch (exception e)
ondatachangeerror ");}}
}}
}
這是資料層的設計,能在其它**中註冊這個資料層的變化並且登出,當資料變化時能夠下發到註冊的觀察者中。
public class testmodel1 : basemodel, idatachangeobserver
public void uninit()
public uint getinterestedpropid(basemodel model)
return 0;
}public void ondatachange(basemodel model, uint propid, params object data)}}
} public class testmodel2 : basemodel);}
} public static class test
}
這是一些測試**。 遊戲程式設計模式之觀察者模式
在物件間定義一種一對多的依賴關係,以便當某物件的狀態改變時,與它存在依賴關係的所有物件都能收到通知並自動進行更新 摘自 遊戲程式設計模式 成就系統 我們不可以將成就判定 寫在上述中的角色類 物理引擎上。這就到了觀察者模式大顯身手的時候了。其實這是可行的,但這種設計方法是糟糕的,會照成 的不可維護 觀...
adapter中的觀察者模式
adapter中的觀察者模式 什麼是觀察者模式 觀察者模式所涉及的角色有 抽象主題 subject 角色 抽象主題角色把所有對觀察者物件的引用儲存在乙個聚集 比如arraylist物件 裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件,抽象主題角色又叫做抽象被觀察...
js中的觀察者模式
如下實現乙個通用發布者 定義發布者物件.是定義乙個物件 var publisher subscribe function fn,type this.subscribers type push fn unsubscribe function fn,type publish function publi...