使用 Goroutines 實現 Observer Pattern

閱讀時間約 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

30會員
193內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
【使用三段式寫作法40天後,讓我解鎖語音辨識高效學習,成為高產思考者的3個重大發現】對於經常需要透過文字表達思維的知識工作者來說,這篇文章能為你開啟一扇新的大門。 三段式寫作法的運用,將能有效解決你在語音辨識學習過程中,如何提升效率和深度的問題。同時,它將將為你帶來全新的學習體驗。 使用三段式寫作法40天來,我透過語音辨識,與自我語言的互動。在此過程中,我有三個重大關於成為高產思考
Thumbnail
avatar
王啟樺
2023-06-18
使用 Cookie 實現 Client 端數據存儲 – 前端工程師必學的 Web Storage 技術(第一篇)深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
avatar
Let's Write
2023-04-24
【使用這3個靈感捕捉器,紀錄你隨時出現的想法吧!】「啊,我想到…..」 你是不是常常有很多念頭,但沒有記錄下來,就不見了? 我從16年前,高中的時候,就從書上認識到「紀錄的重要性」。 紀錄不但幫我們整理思緒,累積經驗,更能成為寫作的素材! 下面三個工具,是我這16年來持續實驗,目前認為最棒最棒的三個靈感捕捉器
Thumbnail
avatar
王啟樺
2023-03-30
使用海洋友善防曬,真就保護珊瑚礁了嗎? 專家列出多達30項知識缺口...@MSMF知識PART為保護珊瑚礁生態,不同地區、有不同的防曬成分法規限制──然若立法的標準,建立在不確實的資料數據上,會不會衍生其他問題狀況,如肌膚健康、旅遊經濟......等其他方面,反而出現好心辦壞事的窘況?
Thumbnail
avatar
jayden_MSMF
2022-07-30
使用DPM觀察球員表現趨勢:數據103DARKO的進階數據DPM,是2021年NBA業內認為最具參考價值的正負值進階數據。更是唯一一個,將球員生涯表現趨勢攤給你看的網站。(update: May 2022)
Thumbnail
avatar
貓爹 Eugene's Dad
2022-01-28
使用海洋中天然光保護成分,肯定最「海洋友善」防曬──but... @MSMF 知識PART「取之於海洋、用之於海洋」使用海洋生命既有光保護機制、或衍生的紫外線過濾劑成分,顯然應對海洋生態更安全──而這些海洋天然防曬成分,近期研究發展情況...
Thumbnail
avatar
jayden_MSMF
2021-08-31
使用手機,要看時機 手機帶給現代人很多方便,幾乎人手至少一機;但在使用的時候有些基本禮儀還是需要注意的。 我在診所工作,看到不少次,病人看病看一半手機響起,當下接起手機也不會跟對方說正在看病稍後聯絡,就坐在醫生前面自顧的談了起來,有些事情又不是三言兩語談完,講個沒完沒了,不管醫生無奈的等他講完再繼續看診,也不管候診
Thumbnail
avatar
風吹
2021-05-20
使用「臉書」10年後,才發現正確使用方式。標題的臉書是一種代稱,也可用其他社群軟體來代入。發現過去一直錯用社群軟體,或者應該說不知不覺中被使用? 被行銷? 被操控按讚?被美麗照片影響? 最初幾年使用臉書除了聯絡朋友和玩遊戲(娛樂)之外,其實感覺受影響的程度沒有很
Thumbnail
avatar
乳酪小姐
2021-05-14