更新於 2023/08/21閱讀時間約 2 分鐘

使用 Goroutines 實現 Observer Pattern

  Photo by Davyn Ben on Unsplash

Photo by Davyn Ben on Unsplash

Observer Pattern 是事件驅動程式設計中的一個重要概念,其中一個物件(稱為「Subject」)維護其依賴項(Observer )的清單,並通知他們有關其狀態的任何變化。在像 Python 這樣的程式語言中,blinker 套件的 signal 提供了一種機制,用於解耦的元件之間的通訊。但我們如何利用 Go 的並行性特性,如 goroutines,來實現這一點呢?讓我們深入探討一種將 Observer Pattern 與goroutines 結合的創新方法。


為何在 Observer Pattern 中使用 Goroutines?

Goroutines 提供了輕量級的並行執行,使它們成為處理動態新增或刪除Observer event broadcasting 而不阻塞主執行緒的理想選擇。

Observer Pattern 的基本概念

  • Subject:維護觀察者清單,支援新增或刪除觀察者,並通知他們進行更改。
  • Observers:對主題發送的通知作出反應。


在 Go 中建構類似 signalObserver



Step 1:定義 Subject

在上述 code 中,我們在 NotifyObservers 中使用了 goroutines 來並行地向所有 Observer 發送訊息。


Step 2:利用 goroutines,我們將建立一個類似 signalObserver

當執行上面的 code 時,兩個 Observer 都會同時接收並處理訊息。


處理進階場景

引入更細緻的通知:不再使用單一訊息類型,而是使用結構或不同的通道來區分訊息,以允許 Observer 監聽特定事件。 實現緩衝:使用帶緩衝的通道,您可以傳送多個訊息而無需等待接收者準備就緒,從而實現更流暢的流程。 超時和上下文:利用上下文套件引入觀察者通知的超時,確保停滯的觀察者不會影響系統。


小結

Goroutines 就像是我們的超級助手,讓 Observer Pattern 變得更有彈性。把設計模式和同時執行的技巧混在一起,Go 展示了它在打造高效、輕鬆耦合、靠事件推動的系統方面的本領。


原文發表於 2023 年 8 月 21 日

連結:https://pandabb3356.github.io/golang-observer-pattern-with-goroutines.html

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.