黑板模式(blackboarddesignpattern)是觀察者模式的乙個擴充套件,知名度並不高,但是我們使用的範圍卻非常廣。黑板模式的意圖如下:
允許訊息的讀寫同時進行,廣泛地互動訊息。
簡單地說,黑板模式允許多個訊息讀寫者同時存在,訊息的生產者和消費者完全分開。這就像乙個黑板,任何乙個教授(訊息的生產者)都可以在其上書寫訊息,任何乙個學生(訊息的消費者)都可以從黑板上讀取訊息,兩者在空間和時間上可以解耦,並且互不干擾。
黑板模式其實就是乙個訊息的廣播。主要解決的問題是訊息的生產者和消費者之間的耦合問題,它的核心是訊息儲存(黑板),它儲存所有訊息,並可以隨時被讀取。當訊息生產者把訊息寫入到訊息倉庫後,其他消費者就可以從倉庫中讀取。當然,此時訊息的寫入者也可以變身為訊息的閱讀者,讀寫者在時間上解耦。對於這些訊息,消費者只需要關注特定訊息,不處理與自己不相關的訊息,這一點通常通過過濾器來實現。
黑板模式一般不會對架構產生什麼影響,但它通常會要求有乙個清晰的訊息結構。黑板模式一般都會提供一系列的過濾器,以便訊息的消費者不再接觸到與自己無關的訊息。
1. 資料庫作為黑板
利用資料庫充當黑板,生產者更新資料資訊,不同的消費者共享資料庫中資訊,這是最常見的實現方式。該方式在技術上容易實現,開發量較少,熟悉度較高。缺點是在大量訊息和高頻率訪問的情況下,效能會受到一定影響。
在該模式下,訊息的讀取是通過消費者主動「拉取」,因此該模式也叫做「拉模式」。
2. 訊息佇列作為黑板
以訊息佇列作為黑板,通過訂閱-發布模型即可實現黑板模式。這也是黑板模式被淡忘的乙個重要原因:訊息佇列(messagequeue)已經非常普及了,它既可以做到訊息的同步處理,也可以實現非同步處理,相信大家已經在開發中廣泛使用了,已經成為跨系統互動的乙個事實標準了。
在該模式下,消費者接收到的訊息是被主動推送過來的,因此該模式也稱為「推模式」。
二十九 直譯器模式
直譯器模式 interpreter 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。知識點 字串匹配,判斷email,匹配 號碼等等。正規表示式就是直譯器模式的一種應用。直譯器模式容易的改變和擴充套件方法。直譯器模式為文法中的每一條規則至少定義了乙個類...
(二十九)設計模式之單例設計模式
單例模式的思路是 乙個類能返回乙個物件的引用 並且永遠是同乙個 和乙個獲得該例項的方法 靜態方法,通常使用 getinstance 名稱 那麼當我們呼叫這個方法時,如果類持有的引用不為空就返回該引用,否者就建立該類的例項,並且將例項引用賦值給該類保持的那個引用再返回。同時將該類的建構函式定義為私有方...
(二十九)設計模式之單例設計模式
單例模式的思路是 乙個類能返回乙個物件的引用 並且永遠是同乙個 和乙個獲得該例項的方法 靜態方法,通常使用 getinstance 名稱 那麼當我們呼叫這個方法時,如果類持有的引用不為空就返回該引用,否者就建立該類的例項,並且將例項引用賦值給該類保持的那個引用再返回。同時將該類的建構函式定義為私有方...