我一直在仔细研究MVC实现和事件总线。
为什么不使用事件总线而不是观察者模式来实现MVC应用程序?
例如,假设我有两个类Model
和View
,在典型的观察者模式中为:
public class Model implements Subject { ... }
public class View implements Observer { ... }
相反,使用green robot event bus或任何其他事件总线的方法的好处/缺点是什么?
那会是这样的:
public class Model {
private int field = 0;
void someFunctionNowTriggerStateChange() {
this.field = field + 1;
...EventBus.getDefault().post(this); //pass itself as the event
}
}
public class View {
@Subscribe onModelUpdated(Model model) {
updateTextLabel(model);
//other model updates
}
}
使用EventBus实施MVC与典型的Observer有什么问题(如果有的话)?
答案 0 :(得分:2)
EventBus实现发布者订阅者模式
EventBus是Android和Java的开源库,使用发布者/订阅者模式进行松散耦合。
difference from observer pattern是发布者与订阅者之间的松散耦合
发布者和订阅者不知道彼此之间是否存在。有第三个组件,称为代理或消息代理或事件总线,发布者和订阅者都知道它,它过滤所有传入消息并相应地分发它们。换句话说,pub-sub是一种模式,用于在不同的系统组件之间传递消息,而这些组件之间不了解彼此的身份。
优点之一是发布者/订阅者模式可以正常/轻松地以异步方式实现,因为拥有第三个组件(代理)有助于实现异步行为,因为执行变得松散耦合
另一个优点是,由于发布者/订阅者模式是松散耦合的,因此实现多个订阅者也将更加直观/容易
观察者模式主要以同步方式实现,即,当某个事件发生时,主题调用其所有观察者的适当方法。发布者/订阅者模式主要以异步方式(使用消息队列)实现。
如果您不需要(也不需要)这样的代理,则可以安全地使用观察者模式,这将使您的代码更小,更简单