Golang - Design Pattern #25: 黑板模式 (Blackboard)

閱讀時間約 3 分鐘
raw-image
📚 組合知識,解決複雜問題 ✨

在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。


🖥️ 黑板模式

黑板模式基於三個主要組件:

  1. 黑板(Blackboard): 這是一個中央存儲區,子系統可以從中讀取資訊並寫入結果。
  2. 知識源(Knowledge Sources):這些是專業的子系統,專門處理特定的問題或任務。
  3. 控制組件(Control Component):負責決定知識源的執行順序。

優點:

  • 靈活性:易於新增或移除知識源,無需修改其他部分。
  • 解耦:知識源之間是獨立的,允許並行和分布式處理。
  • 逐步求解:可以逐步解決問題,並根據每一步的結果動態調整。


Go to code


🌐 網路流量分析

想像一下一個安全系統,它需要分析網路流量以檢測潛在的威脅。


type Blackboard struct {
data []string
}

func (b *Blackboard) AddData(d string) {
b.data = append(b.data, d)
}

type KnowledgeSource interface {
Analyze(b *Blackboard)
}

type TrafficAnalyzer struct{}

func (t *TrafficAnalyzer) Analyze(b *Blackboard) {
// Analyze traffic patterns...
}

type ThreatDetector struct{}

func (t *ThreatDetector) Analyze(b *Blackboard) {
// Detect potential threats...
}

type ControlComponent struct{}

func (c *ControlComponent) Execute(b *Blackboard, ks KnowledgeSource) {
ks.Analyze(b)
}


🎶 語音識別系統

在語音識別系統中,聲音的多個層面如音高、節奏和強度都可能需要分析。


type SoundAnalysis struct {
data []float64
}

type PitchAnalyzer struct{}

func (p *PitchAnalyzer) Analyze(s *SoundAnalysis) {
// Analyze pitch...
}

type RhythmAnalyzer struct{}

func (r *RhythmAnalyzer) Analyze(s *SoundAnalysis) {
// Analyze rhythm...
}

type IntensityAnalyzer struct{}

func (i *IntensityAnalyzer) Analyze(s *SoundAnalysis) {
// Analyze intensity...
}

type ControlComponent struct{}

func (c *ControlComponent) Execute(s *SoundAnalysis, ks KnowledgeSource) {
ks.Analyze(s)
}


結論 🌟

黑板模式提供了一個強大的方式來組合多個子系統的專業知識,從而解決複雜的問題。此模式在需要多個子系統共同努力來完成一項任務的情況下特別有用,例如人工智能或大規模資料處理。



感謝

謝謝大家看完這篇,如果您喜歡我的文章,歡迎 小額贊助我 ^^


avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
在物件導向的世界中,物件的行為會基於它的狀態而改變。當我們面臨更多的狀態和轉換時,狀態機就成為必要,而HSM(Hierarchical State Machine,層次狀態機)模式更是一個進一步的解決方案,它以層次化的方式組織狀態。
在設計軟體應用程式時,為了保持模組化、可維護性和可擴展性,開發人員通常會使用多層架構。3-tier(三層)架構是其中最常見的一種,它基本上分為三個主要層次:表示層、邏輯層和數據層。
你有沒有想過,當你在玩電子遊戲時,每次過關或失敗後,遊戲是如何保存你的遊戲進度的呢? 🎮 或者當你正在編輯文檔時,"Undo" 功能又是如何工作的? 这些都可以通過備忘錄模式來實現!
當我們需要給某個系統或應用程序添加一種新的語言或表達式時,解譯器模式就派上了用場。這種模式提供了一種將句子或表達式分解成多個令牌的方法,然後根據這些令牌進行解釋或解析。
訪問者模式 (Visitor Pattern) 是一種設計模式,它允許開發者將新的操作新增到現有物件結構中,而不必修改該結構的內部代碼。該模式的重點是將操作和物件結構分離,提供一個彈性的方式新增新的行為。
在許多複雜的程式設計問題中,如何將抽象與其具體實現分離開來,往往是一個重要的挑戰。橋接模式正是為了解決這樣的問題而生。透過橋接模式 (Bridge Pattern),不僅可以確保抽象和實現在結構上分離,還能提供一套彈性的機制來適應變化。
在物件導向的世界中,物件的行為會基於它的狀態而改變。當我們面臨更多的狀態和轉換時,狀態機就成為必要,而HSM(Hierarchical State Machine,層次狀態機)模式更是一個進一步的解決方案,它以層次化的方式組織狀態。
在設計軟體應用程式時,為了保持模組化、可維護性和可擴展性,開發人員通常會使用多層架構。3-tier(三層)架構是其中最常見的一種,它基本上分為三個主要層次:表示層、邏輯層和數據層。
你有沒有想過,當你在玩電子遊戲時,每次過關或失敗後,遊戲是如何保存你的遊戲進度的呢? 🎮 或者當你正在編輯文檔時,"Undo" 功能又是如何工作的? 这些都可以通過備忘錄模式來實現!
當我們需要給某個系統或應用程序添加一種新的語言或表達式時,解譯器模式就派上了用場。這種模式提供了一種將句子或表達式分解成多個令牌的方法,然後根據這些令牌進行解釋或解析。
訪問者模式 (Visitor Pattern) 是一種設計模式,它允許開發者將新的操作新增到現有物件結構中,而不必修改該結構的內部代碼。該模式的重點是將操作和物件結構分離,提供一個彈性的方式新增新的行為。
在許多複雜的程式設計問題中,如何將抽象與其具體實現分離開來,往往是一個重要的挑戰。橋接模式正是為了解決這樣的問題而生。透過橋接模式 (Bridge Pattern),不僅可以確保抽象和實現在結構上分離,還能提供一套彈性的機制來適應變化。
你可能也想看
Google News 追蹤
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
預言機Oracle Machine原本指的是一種可以藉由計算得到特定答案的抽象電腦(也被稱為黑盒子、黑箱),而區塊鏈的預言機則是將真實世界資料與區塊鏈連結的可信任第三方。
人工智慧中最受歡迎的作法莫過於類神經網路,以當今最受歡迎的大型語言模型 (LLM)也不例外,然而這些持續受到爭議:黑盒子,也就是說我們不知道它內部怎麼運作,只知道給它一段話,它就會輸出一段話來回應。 以下從幾個面向來討論「黑盒子」議題: 透明性 Transparency 以LLM模型的開
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
本文探討了系統思維的重要性,強調理解元素、關係及其背後規律對洞察複雜系統至關重要。書中以商業模式變化為例,展示如何透過系統思維識別時代機遇,提升競爭力。此外,強調系統思維在學習中的應用,促進跨學科理解、批判性思維和解決問題能力,為適應未來變化奠定基礎。
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
預言機Oracle Machine原本指的是一種可以藉由計算得到特定答案的抽象電腦(也被稱為黑盒子、黑箱),而區塊鏈的預言機則是將真實世界資料與區塊鏈連結的可信任第三方。
人工智慧中最受歡迎的作法莫過於類神經網路,以當今最受歡迎的大型語言模型 (LLM)也不例外,然而這些持續受到爭議:黑盒子,也就是說我們不知道它內部怎麼運作,只知道給它一段話,它就會輸出一段話來回應。 以下從幾個面向來討論「黑盒子」議題: 透明性 Transparency 以LLM模型的開
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
本文探討了系統思維的重要性,強調理解元素、關係及其背後規律對洞察複雜系統至關重要。書中以商業模式變化為例,展示如何透過系統思維識別時代機遇,提升競爭力。此外,強調系統思維在學習中的應用,促進跨學科理解、批判性思維和解決問題能力,為適應未來變化奠定基礎。
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val