08.18 設計模式之黑板模式

黑板模式的意圖

黑板模式是觀察者模式的一個擴展,知名度並不高,但使用的範圍卻非常廣. 其意圖為: 允許消息的讀寫同時進行, 廣泛的交互消息.

簡單的說, 黑板模式允許多個消息讀寫者同時存在, 消息的生產者和消費者完全分開. 這就像一個黑板, 任何一個老師(消息的生產者)都可以在上面書寫消息, 任何一個學生(消息的消費者)都可以從黑板上讀取消息, 兩者在空間和時間上可以解耦, 互不干擾.

示意圖如下:

設計模式之黑板模式

黑板模式就是消息的廣播,主要解決的問題是消息的生產者和消費者之間的耦合問題, 它的核心是消息存儲(黑板), 它存儲所有消息,並可以隨時被讀取. 當消息生產者將消息寫入到消息倉庫後,其他消費者就可以從倉庫中讀取. 當然,此時消息的寫入這也可以變身為消息的消費者,讀寫者在時間上是解耦的. 對於這些消息, 消費者只需要關注特定消息, 不處理與自己不相關的消息, 這一點通常通過過濾器來實現.

黑板模式的實現方法

黑板模式一般不會對架構產生什麼影響, 但它通常會要求有一個清晰的消息結構. 黑板模式一般都會提供一系列的過濾器,以便消息的消費者不再接觸到與自己無關的消息.在實際開發中,黑板模式常見的有兩種實現方式:

  1. 數據庫作為黑板. 利用數據庫充當黑板,生產者更新數據,不同的消費則共享數據庫中的信息, 這是最常見的實現方式. 該方式在技術上容易實現, 開發量較少,熟悉度較高. 缺點是在大量消息和高頻率訪問的情況下, 性能會受到一定影響. 在該模式下, 消息的讀取是通過消費者主動"拉取", 因此該模式也叫做"拉模式".
  2. 消息隊列作為黑板. 以消息隊列作為黑板, 通過訂閱-發佈模型即可實現黑板模式. 這也是黑板模式被淡忘的一個重要原因: 消息隊列已經非常普及了. 在該模式下, 消費者接收到的消息是被主動推送過來的, 因此該模式也叫做"推模式".


分享到:


相關文章: