Golang - Design Pattern #4: 觀察者模式 (Observer)

更新於 發佈於 閱讀時間約 3 分鐘

觀察者模式(Observer):就像你的YouTube訂閱一樣!

有沒有想過,當你在YouTube訂閱了一個頻道,每當有新影片,你就會得到通知呢?這背後就是觀察者模式在運作!


那什麼是觀察者模式?

很簡單,觀察者模式就像是一個明星(被觀察者)和他的粉絲(觀察者)。每當明星有什麼新動態,粉絲都會第一時間知道。


實務上的例子

股票市場的分析師

想像你是一名股票市場的分析師。你關注的股票一旦價格變動,你會馬上得知,這樣你就能及時做出決策了。

電商的價格提醒

你有沒有在某些購物網站上關注過某商品,希望它降價時得到通知?這就是觀察者模式的實務運用之一!

看看程式怎麼寫

假設我們要模擬股票市場的情境。首先,我們有一群分析師等著接收股票的價格更新通知。當股票價格變動,他們都會馬上知道!

package main

import "fmt"

// Observer 接口:所有關注股票價格的分析師都要實現這個接口
type Observer interface {
Notify(stockPrice float32)
}

// StockMarket 是被觀察者,當股票價格變動時,會通知所有註冊的分析師
type StockMarket struct {
observers []Observer
stockPrice float32
}

func (s *StockMarket) Register(observer Observer) {
s.observers = append(s.observers, observer)
}

func (s *StockMarket) SetPrice(price float32) {
s.stockPrice = price
s.notifyAll()
}

func (s *StockMarket) notifyAll() {
for _, observer := range s.observers {
observer.Notify(s.stockPrice)
}
}

// Analyst 實現了 Observer 接口,代表一個股票市場的分析師
type Analyst struct {
name string
}

func (a *Analyst) Notify(stockPrice float32) {
fmt.Printf("%s 得到了新的股價:$%f\n", a.name, stockPrice)
}

func main() {
stockMarket := &StockMarket{}

alice := &Analyst{name: "Alice"}
bob := &Analyst{name: "Bob"}

stockMarket.Register(alice)
stockMarket.Register(bob)

stockMarket.SetPrice(120.0) // 當價格改變時,Alice 和 Bob 都會被通知
stockMarket.SetPrice(125.5) // 再次改變價格,Alice 和 Bob 都會得到通知
}

這段程式碼模擬了一個股票市場(StockMarket),當它的股價改變時,所有註冊過的分析師(Analyst,他們是觀察者)都會得到通知。在 main 函數中,我們模擬了股價的改變,並且觀察到註冊的分析師如何獲得通知。


總結

觀察者模式其實就是讓事情保持更新,確保你不會錯過任何東西。就像你不想錯過你最愛 YouTuber 的新影片,或者那雙你關注已久的鞋子終於降價了!在軟體設計中,這可以幫我們保持編碼的整潔,並且易於擴展。下次當你得到某個通知,或許你會想到這背後的觀察者模式呢!

avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
當面臨多種算法或策略的選擇,策略模式可以作為一個非常有效的解決方案。它允許我們在運行時選擇不同的策略,從而使程式碼更加靈活和可擴展。
工廠模式 (Factory) 在物件創建中佔有舉足輕重的位置,讓我們能以更模組化的方式管理物件的生成。這篇文章將帶領你深入工廠模式在Go語言中的實踐。
哈囉!繼續我們的Go設計模式之旅,今天我們要探討的是「單例模式」。可能你已經聽過它,也可能還沒。但不用擔心,我們會從基礎解釋開始!
大家好,歡迎來到「Golang - Design Pattern」系列文!你或許已經聽過「設計模式」這四個字,或者你可能還不太清楚它在軟體開發中的角色。不管你是哪一種情況,我們都會從頭開始,循序漸進地為你解鎖Go語言在設計模式中的神奇之處。 簡介 設計模式是什麼呢?簡單地說,它就是一套「最佳
當面臨多種算法或策略的選擇,策略模式可以作為一個非常有效的解決方案。它允許我們在運行時選擇不同的策略,從而使程式碼更加靈活和可擴展。
工廠模式 (Factory) 在物件創建中佔有舉足輕重的位置,讓我們能以更模組化的方式管理物件的生成。這篇文章將帶領你深入工廠模式在Go語言中的實踐。
哈囉!繼續我們的Go設計模式之旅,今天我們要探討的是「單例模式」。可能你已經聽過它,也可能還沒。但不用擔心,我們會從基礎解釋開始!
大家好,歡迎來到「Golang - Design Pattern」系列文!你或許已經聽過「設計模式」這四個字,或者你可能還不太清楚它在軟體開發中的角色。不管你是哪一種情況,我們都會從頭開始,循序漸進地為你解鎖Go語言在設計模式中的神奇之處。 簡介 設計模式是什麼呢?簡單地說,它就是一套「最佳
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前幾個篇章已大致講完技術分析的原理,本篇是前篇的延伸,當我們觀察趨勢中的壓力與支撐時,如果出現特定結構的型態,此時是技術線型發出的強烈訊號,必須好好重視。有哪三種型態是.......
※ 觀察者模式 定義: 觀察者模式(Observer Pattern)是一種設計模式,涉及兩個主要角色:觀察者(Observers)和被觀察者(Subject)。在這種模式中,一群觀察者訂閱並觀察某個被觀察的對象。當被觀察者的狀態發生改變時,它會通知所有觀察者,讓他們知曉並作出相應的反應。這種模
Thumbnail
Data Analyst 工作過程中所使用的預估方法,不只用在工作上,也可用於投資
每個人在操作台指時,會有不同的輔助觀察標的。 比如有人看籌碼,有人看權值股,看五檔買進賣出的掛單量,成交明細以及吃單的速度,或者看委買委賣的口數筆數,成交口數跟筆數。 個人經驗上,觀察選擇權強弱可以更快更準確判斷台指走勢 而且可以判斷將走趨勢盤或震盪盤。如果可以發現選擇權發出的訊號
Thumbnail
股市交易中,若能透過程式來輔助進出場的訊號,當手上的持股或者股池數量較多時,可以提供投資人較有效率的判斷,因此非常建議投資人花費一點時間了解程式交易的邏輯,比較常見的就是XQ全球贏家的"盤中量化模組(1000NT/月)" 或者比較簡易型的量化積木模組(500NT/月)。 每個投資者會因學習的過
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
股市中,買進一標的後,你就像裝了雷達,注意每則消息。若因他人言論買進,先考量其成功率;若自主決策,記錄買進原因,並審慎評估外界消息影響。別因他人而賣出持股。
Thumbnail
這篇文章討論了消費者意向分析所涉及的消費市場商品銷售的變化。討論了觀察家透過角度數據資料庫的線圖,以及人工智慧的應用。文章也提及了消費者的購物週期及保健食品的消費趨勢,以及 RMN 商業模式。最後,強調了角度數據的觀察家應該始終關注最新的消費資料。
Thumbnail
學習K線圖的好處是能夠在這項技能當中研判各國股市、匯率或個股的趨勢脈動,因K棒的形成是真金白銀打出來的型態,就是最真實的市場的反映,若將K棒及成交量結合,就能掌握大部分市場的走向,未來您可以做波段或是當沖交易都適用,就不需要再聽任何消息能夠自己做判斷。
這邊想提醒訂閱者,我之前講過我在觀察的股票,以及想分享給有做過作業的同學一些實戰的經驗。 我之前說過我在觀察證券股,若以後都超過三千億,可以佈局證券股。上周台股成交量已經放大到超過4千億,同時前幾天的新聞也提到證交稅收收入不錯,連幾個月漲。 我想大家可以參考一下。 同時,上次請大家做的作業,大
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前幾個篇章已大致講完技術分析的原理,本篇是前篇的延伸,當我們觀察趨勢中的壓力與支撐時,如果出現特定結構的型態,此時是技術線型發出的強烈訊號,必須好好重視。有哪三種型態是.......
※ 觀察者模式 定義: 觀察者模式(Observer Pattern)是一種設計模式,涉及兩個主要角色:觀察者(Observers)和被觀察者(Subject)。在這種模式中,一群觀察者訂閱並觀察某個被觀察的對象。當被觀察者的狀態發生改變時,它會通知所有觀察者,讓他們知曉並作出相應的反應。這種模
Thumbnail
Data Analyst 工作過程中所使用的預估方法,不只用在工作上,也可用於投資
每個人在操作台指時,會有不同的輔助觀察標的。 比如有人看籌碼,有人看權值股,看五檔買進賣出的掛單量,成交明細以及吃單的速度,或者看委買委賣的口數筆數,成交口數跟筆數。 個人經驗上,觀察選擇權強弱可以更快更準確判斷台指走勢 而且可以判斷將走趨勢盤或震盪盤。如果可以發現選擇權發出的訊號
Thumbnail
股市交易中,若能透過程式來輔助進出場的訊號,當手上的持股或者股池數量較多時,可以提供投資人較有效率的判斷,因此非常建議投資人花費一點時間了解程式交易的邏輯,比較常見的就是XQ全球贏家的"盤中量化模組(1000NT/月)" 或者比較簡易型的量化積木模組(500NT/月)。 每個投資者會因學習的過
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
股市中,買進一標的後,你就像裝了雷達,注意每則消息。若因他人言論買進,先考量其成功率;若自主決策,記錄買進原因,並審慎評估外界消息影響。別因他人而賣出持股。
Thumbnail
這篇文章討論了消費者意向分析所涉及的消費市場商品銷售的變化。討論了觀察家透過角度數據資料庫的線圖,以及人工智慧的應用。文章也提及了消費者的購物週期及保健食品的消費趨勢,以及 RMN 商業模式。最後,強調了角度數據的觀察家應該始終關注最新的消費資料。
Thumbnail
學習K線圖的好處是能夠在這項技能當中研判各國股市、匯率或個股的趨勢脈動,因K棒的形成是真金白銀打出來的型態,就是最真實的市場的反映,若將K棒及成交量結合,就能掌握大部分市場的走向,未來您可以做波段或是當沖交易都適用,就不需要再聽任何消息能夠自己做判斷。
這邊想提醒訂閱者,我之前講過我在觀察的股票,以及想分享給有做過作業的同學一些實戰的經驗。 我之前說過我在觀察證券股,若以後都超過三千億,可以佈局證券股。上周台股成交量已經放大到超過4千億,同時前幾天的新聞也提到證交稅收收入不錯,連幾個月漲。 我想大家可以參考一下。 同時,上次請大家做的作業,大