簡體   English   中英

觀察者模式 vs 事件總線消息方法

[英]Observer pattern vs Event Bus message approach

我一直在密切關注 MVC 實現和事件總線。

為什么不使用 Event-bus 而不是 Observer Pattern 來實現 MVC 應用程序?

例如,假設我有兩個類ModelView ,在典型的觀察者模式中,它將是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM