黑板模式
黑板模式(Blackboard Design Pattern)是觀察者模式的一個擴展:允許消息的讀寫同時進行,廣泛地交互消息。
黑板模式允許多個消息讀寫者同時存在,消息的生產者和消費者完全分開,兩者在空間和時間上可以解耦,並且互不干擾。
黑板模式是消息的廣播,主要解決消息的生產者和消費者之間的耦合問題,核心是消息存儲(黑板),它存儲所有消息,並可以隨時被讀取。當然,消息的寫入者也可以變身爲消息的閱讀者,讀寫者在時間上解耦。對於這些消息,消費者只需要關注特定消息,不處理與自己不相關的消息,這一點通常通過過濾器來實現。
黑板模式的實現方式
黑板模式常見的有兩種實現方式:數據庫作爲黑板、消息隊列作爲黑板。
(1)數據庫作爲黑板
利用數據庫充當黑板,生產者更新數據信息,不同的消費者共享數據庫中信息,這是最常見的實現方式。該方式在技術上容易實現,開發量較少,熟悉度較高。缺點是在大量消息和高頻率訪問的情況下,性能會受到一定影響。
在該模式下,消息的讀取是通過消費者主動“拉取”,因此該模式也叫做“拉模式”。
(2)消息隊列作爲黑板
以消息隊列作爲黑板,通過訂閱-發佈模型即可實現黑板模式。這也是黑板模式被淡忘的一個重要原因:消息隊列(Message Queue)已經非常普及了,所有大多人只記得消息隊列不記得黑板模式。在該模式下,消費者接收到的消息是被主動推送過來的,因此該模式也稱爲“推模式”。