[英]Observer pattern vs Event Bus message approach
我一直在密切關注 MVC 實現和事件總線。
為什么不使用 Event-bus 而不是 Observer Pattern 來實現 MVC 應用程序?
例如,假設我有兩個類Model
和View
,在典型的觀察者模式中,它將是:
public class Model implements Subject { ... }
public class View implements Observer { ... }
相反,使用綠色機器人事件總線或任何其他事件總線的方法有什么好處/缺點?
它會是這樣的:
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 有哪些問題(如果有)?
EventBus 實現了發布者訂閱者模式,
EventBus 是 Android 和 Java 的開源庫,使用發布者/訂閱者模式進行松散耦合。
發布者和訂閱者不知道彼此的存在。 還有第三個組件,稱為代理或消息代理或事件總線,發布者和訂閱者都知道它,它過濾所有傳入的消息並相應地分發它們。 換句話說,pub-sub 是一種用於在不同系統組件之間傳遞消息的模式,而這些組件並不知道彼此的身份。
一個優點是發布者/訂閱者模式可以正常/更容易地以異步方式實現,因為有第三個組件,代理,幫助實現異步行為,因為執行變得松散耦合
另一個優點,因為發布者/訂閱者模式是松散耦合的,實現多個訂閱者會更直觀/更容易
觀察者模式大多以同步方式實現,即當某個事件發生時,Subject 調用其所有觀察者的適當方法。 發布者/訂閱者模式主要以異步方式實現(使用消息隊列)。
如果你不需要(也不會需要)這樣的代理,你可以安全地使用觀察者模式,這將使你的代碼更小更簡單
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.