1. 程式人生 > >黑板模式(Blackboard Design Pattern)。

黑板模式(Blackboard Design Pattern)。

意圖

黑板模式是觀察者模式的一個擴充套件,知名度並不高,但是我們使用的範圍卻非常廣。黑板模式的意圖如下:

允許訊息的讀寫同時進行,廣泛的互動訊息。

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

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

實現方法

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

  • 資料庫作為黑板

利用資料庫充當黑板,生產者更新資料資訊,不同的消費者共享資料庫中資訊,這是最常用的實現方式。該方式在技術上容易實現,開發量較少,熟悉度較高。缺點是在大量訊息和高頻率訪問的情況下,效能會受到一定影響。

在該模式下,訊息的讀取是通過消費者主動“拉取”,因此該模式也叫做“拉模式”。

  • 訊息佇列作為黑板

以訊息佇列作為黑板,通過訂閱-釋出模式即可實現黑板模式。這也是黑板模式被淡忘的一個重要原因:訊息佇列已經非常普及了。

在該模式下,消費者接收到的訊息是被主動推送出來的,因此該模式也稱為“推模式”。