在MVC中通知观察者的最佳方式?

Dev*_*Dev 3 model-view-controller design-patterns

假设某个View感兴趣的模型中有5个或6个变量,您是否为每个变量编写了不同的函数,例如

int a;
int b;
int c;

void setA( newA ) {
   a = newA;
   notifyAObservers();
}

void setB( newB ) {
   b = newB;
   notifyBObservers();
}

void setC( newC ) {
   b = newC;
   notifyCObservers();
}
Run Code Online (Sandbox Code Playgroud)

或者你只有一个通知方法并浪费一点CPU时间

ie而不是notifyAObservers和notifyBObservers,你只需要notifyObservers

Tho*_*ens 6

我相信传统的方法是通知所有观察者,让他们处理它.这是因为您不知道哪些观察者正在观察哪个变量 - 您只知道他们希望在出现变化时收到通知.但是,如果您确实知道观察者正在观察哪些变量,并且性能至关重要,那么您可能会做出类似于您拥有的内容.

在传统的Observer模式中,Observers实现了一个update()方法,当发生更改时,控制器会调用该方法.Observables(数据模型)将有一个notifyObservers()方法,它迭代Observers并调用它们的update()方法.然后,观察者得到他们需要的任何东西,视图更新.

但是,只要我实现了Observer模式,我只需保留一个观察者列表并通知所有人.这样,我只有一个观察者列表,其余的类以及不同的观察者都可以改变,而不会对可观察的类通知进行任何更改.