Observer Pattern
是事件驅動程式設計中的一個重要概念,其中一個物件(稱為「Subject」)維護其依賴項(Observer
)的清單,並通知他們有關其狀態的任何變化。在像 Python 這樣的程式語言中,blinker
套件的 signal
提供了一種機制,用於解耦的元件之間的通訊。但我們如何利用 Go 的並行性特性,如 goroutines,來實現這一點呢?讓我們深入探討一種將 Observer Pattern
與goroutines 結合的創新方法。
Observer Pattern
中使用 Goroutines? Goroutines 提供了輕量級的並行執行,使它們成為處理動態新增或刪除Observer
和 event broadcasting
而不阻塞主執行緒的理想選擇。
Observer Pattern
的基本概念
Subject
:維護觀察者清單,支援新增或刪除觀察者,並通知他們進行更改。 Observers
:對主題發送的通知作出反應。 signal
的 Observer
Step 1:定義 Subject
:
在上述 code 中,我們在 NotifyObservers
中使用了 goroutines 來並行地向所有 Observer
發送訊息。
Step 2:利用 goroutines,我們將建立一個類似 signal
的Observer
:
當執行上面的 code 時,兩個 Observer
都會同時接收並處理訊息。
引入更細緻的通知:不再使用單一訊息類型,而是使用結構或不同的通道來區分訊息,以允許 Observer
監聽特定事件。 實現緩衝:使用帶緩衝的通道,您可以傳送多個訊息而無需等待接收者準備就緒,從而實現更流暢的流程。 超時和上下文:利用上下文套件引入觀察者通知的超時,確保停滯的觀察者不會影響系統。
Goroutines 就像是我們的超級助手,讓 Observer Pattern
變得更有彈性。把設計模式和同時執行的技巧混在一起,Go 展示了它在打造高效、輕鬆耦合、靠事件推動的系統方面的本領。
原文發表於 2023 年 8 月 21 日
連結:https://pandabb3356.github.io/golang-observer-pattern-with-goroutines.html