1. 程式人生 > >Java的回撥函式和觀察者模式的區別

Java的回撥函式和觀察者模式的區別

    前一段時間研究了一下設計模式,突然想到觀察者模式和回撥函式之間的聯絡,網上也沒有什麼人說清楚,便自己又仔細想了想,便有了如下觀點,歡迎各位大神前來拍磚!

    首先,先闡述一下網上說的,網上先說這是完全不同的兩種東西,介面回撥是觀察者模式的實現,後者是一種設計模式。

    然而,我更關注的是兩者之間的聯絡,我便總結了一下網上前輩的觀點。

    我的觀點是回撥函式應該屬於觀察者模式的一種,目的是為了替代輪循機制,將元件之間的耦合性降低,而真正的底層實現依舊使用的是輪詢機制。

    就像Mina2中的handler,每當收到訊息便呼叫messageReceived方法,又或者類似安卓中的Handler,安卓中是一旦呼叫handler.sendMessage(msg)方法後,自動執行public void handleMessage(Message msg),我們需要重寫此方法來處理業務邏輯,這些都可以認定為利用了回撥函式來實現的觀察者模式。

    觀察者模式還有一種實現方式是釋出/訂閱,這一點又有點類似中介者模式。

    這兩者的區別我引用下面一段話吧:

  • 在Obsever模式中, 不存在封裝約束的單一物件。Observer 和 Subject 必須合作才能維持約束。
  • Communication(通訊)模式由觀察者和目標互聯的方式決定:單一目標通常有很多觀察者,有時一個目標的觀察者是另一個觀察者的目標
  • Mediator 和 Observer  都能促進鬆耦合,然後Mediator 模式通過限制物件嚴格通過Mediator 進行通訊來實現這個個目的
  • Observer 模式建立觀察者對喜愛那個,觀察者物件向訂閱它們的對喜愛那個釋出其感興趣的事件。

    其實對於中介者模式,大家可以想想MVC,無論是Spring3MVC還是Structs MVC,其中的controller都運用到了中介者模式,其中的奧妙還是需要自己去領悟。

    分享學習心得,歡迎來搞,哦不對,是來稿~