使用 Goroutines 實現 Observer Pattern

更新於 2023/08/21閱讀時間約 2 分鐘
  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

avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
對於經常需要透過文字表達思維的知識工作者來說,這篇文章能為你開啟一扇新的大門。 三段式寫作法的運用,將能有效解決你在語音辨識學習過程中,如何提升效率和深度的問題。同時,它將將為你帶來全新的學習體驗。 使用三段式寫作法40天來,我透過語音辨識,與自我語言的互動。在此過程中,我有三個重大關於成為高產思考
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
「啊,我想到…..」 你是不是常常有很多念頭,但沒有記錄下來,就不見了? 我從16年前,高中的時候,就從書上認識到「紀錄的重要性」。 紀錄不但幫我們整理思緒,累積經驗,更能成為寫作的素材! 下面三個工具,是我這16年來持續實驗,目前認為最棒最棒的三個靈感捕捉器
Thumbnail
為保護珊瑚礁生態,不同地區、有不同的防曬成分法規限制──然若立法的標準,建立在不確實的資料數據上,會不會衍生其他問題狀況,如肌膚健康、旅遊經濟......等其他方面,反而出現好心辦壞事的窘況?
Thumbnail
DARKO的進階數據DPM,是2021年NBA業內認為最具參考價值的正負值進階數據。更是唯一一個,將球員生涯表現趨勢攤給你看的網站。(update: May 2022)
Thumbnail
「取之於海洋、用之於海洋」使用海洋生命既有光保護機制、或衍生的紫外線過濾劑成分,顯然應對海洋生態更安全──而這些海洋天然防曬成分,近期研究發展情況...
Thumbnail
手機帶給現代人很多方便,幾乎人手至少一機;但在使用的時候有些基本禮儀還是需要注意的。 我在診所工作,看到不少次,病人看病看一半手機響起,當下接起手機也不會跟對方說正在看病稍後聯絡,就坐在醫生前面自顧的談了起來,有些事情又不是三言兩語談完,講個沒完沒了,不管醫生無奈的等他講完再繼續看診,也不管候診
Thumbnail
標題的臉書是一種代稱,也可用其他社群軟體來代入。發現過去一直錯用社群軟體,或者應該說不知不覺中被使用? 被行銷? 被操控按讚?被美麗照片影響? 最初幾年使用臉書除了聯絡朋友和玩遊戲(娛樂)之外,其實感覺受影響的程度沒有很
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
對於經常需要透過文字表達思維的知識工作者來說,這篇文章能為你開啟一扇新的大門。 三段式寫作法的運用,將能有效解決你在語音辨識學習過程中,如何提升效率和深度的問題。同時,它將將為你帶來全新的學習體驗。 使用三段式寫作法40天來,我透過語音辨識,與自我語言的互動。在此過程中,我有三個重大關於成為高產思考
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
「啊,我想到…..」 你是不是常常有很多念頭,但沒有記錄下來,就不見了? 我從16年前,高中的時候,就從書上認識到「紀錄的重要性」。 紀錄不但幫我們整理思緒,累積經驗,更能成為寫作的素材! 下面三個工具,是我這16年來持續實驗,目前認為最棒最棒的三個靈感捕捉器
Thumbnail
為保護珊瑚礁生態,不同地區、有不同的防曬成分法規限制──然若立法的標準,建立在不確實的資料數據上,會不會衍生其他問題狀況,如肌膚健康、旅遊經濟......等其他方面,反而出現好心辦壞事的窘況?
Thumbnail
DARKO的進階數據DPM,是2021年NBA業內認為最具參考價值的正負值進階數據。更是唯一一個,將球員生涯表現趨勢攤給你看的網站。(update: May 2022)
Thumbnail
「取之於海洋、用之於海洋」使用海洋生命既有光保護機制、或衍生的紫外線過濾劑成分,顯然應對海洋生態更安全──而這些海洋天然防曬成分,近期研究發展情況...
Thumbnail
手機帶給現代人很多方便,幾乎人手至少一機;但在使用的時候有些基本禮儀還是需要注意的。 我在診所工作,看到不少次,病人看病看一半手機響起,當下接起手機也不會跟對方說正在看病稍後聯絡,就坐在醫生前面自顧的談了起來,有些事情又不是三言兩語談完,講個沒完沒了,不管醫生無奈的等他講完再繼續看診,也不管候診
Thumbnail
標題的臉書是一種代稱,也可用其他社群軟體來代入。發現過去一直錯用社群軟體,或者應該說不知不覺中被使用? 被行銷? 被操控按讚?被美麗照片影響? 最初幾年使用臉書除了聯絡朋友和玩遊戲(娛樂)之外,其實感覺受影響的程度沒有很