在我的项目中,我有一个主要的.as定义了一个类。
在课堂上我有各种其他对象作为成员。其中一个包含有关应用程序状态的信息,我将其注入其他课程,以便他们都知道发生了什么。
状态类还会在事情发生变化时调度自定义事件。
我的问题是,做这样的事情是不好的:
public class SomeClass {
private var appState:AppState;
public function SomeClass(appState:AppState) {
this.appState = appState;
this.appState.addEventListener(AppState.INFO_UPDATE, this.appStateUpdated);
}
private function appStateUpdated(e:Event) {
//do something with new appstate
}
}
我喜欢这种方式,但我不确定它是否会在以后回来咬我。这是一个好方法吗?
答案 0 :(得分:0)
您可以使用回调代替eventListeners,它会更快。
在AppState类中,您将设置一个数组来保存回调函数,并在更新时调用它们。
public class AppState
{
private var callbacks:Array = [];
public function addCallback(update:function):void
{
}
public function removeCallback(update:function):void
{
}
public function update():void
{
for each (var callback:Function in callbacks)
{
callback.apply(null, [//maybe some param here]);
}
}
}
答案 1 :(得分:0)
是的,事件系统本身或多或少地创建了观察者模式。 (也就是说,一个对象观察另一个对象的变化)
基于观察者模式是MVC模式,它几乎是每种应用程序的基础。
其中一部分是V,view
,观察M,model
进行更改。
在您的情况下,appState
可以是model
,SomeClass
可以是view
(其中一类)。为了观察model
,view
会收到对model
对象的引用。这通常完全按照您的方式完成。
请记住,不要强迫任何模式。上面的要点是告诉你,将一个observable传递给类似的类是很常见的。但是,这并不意味着它在您的情况下一定是正确的选择。 (这很可能是正确的选择,只是不要认为这样做本身就是正确的选择)
在销毁appState
对象时,不要忘记清除对SomeClass
的引用。