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
留言分享你的想法!
avatar-img
KH Huang的沙龍
36會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
KH Huang的沙龍的其他內容
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
看更多
你可能也想看
Thumbnail
前幾個篇章已大致講完技術分析的原理,本篇是前篇的延伸,當我們觀察趨勢中的壓力與支撐時,如果出現特定結構的型態,此時是技術線型發出的強烈訊號,必須好好重視。有哪三種型態是.......
Thumbnail
前幾個篇章已大致講完技術分析的原理,本篇是前篇的延伸,當我們觀察趨勢中的壓力與支撐時,如果出現特定結構的型態,此時是技術線型發出的強烈訊號,必須好好重視。有哪三種型態是.......
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】很多股票投資人,都想要預測,什麼時候股票會漲,什麼時候股票會跌,但是最廣為人的K線等技術指標,最容易失靈的原因,他是透過歷史數據而形成的走勢圖,就好像看這後照鏡開車,所以使用景氣燈號,是一個更好的方法。
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】很多股票投資人,都想要預測,什麼時候股票會漲,什麼時候股票會跌,但是最廣為人的K線等技術指標,最容易失靈的原因,他是透過歷史數據而形成的走勢圖,就好像看這後照鏡開車,所以使用景氣燈號,是一個更好的方法。
Thumbnail
在 ICT 2022 Model 文章中,我們介紹了價格的行為模式以及時間與價格的關係。文章透過實際案例說明瞭ICT 2022 Model的應用,並給出了日內PD Array的相關概念。最後,作者呼籲讀者要多加回測練習,加強對ICT概念的掌握。文章涵蓋了豐富的交易策略和理論知識,適合投資熱衷者閱讀。
Thumbnail
在 ICT 2022 Model 文章中,我們介紹了價格的行為模式以及時間與價格的關係。文章透過實際案例說明瞭ICT 2022 Model的應用,並給出了日內PD Array的相關概念。最後,作者呼籲讀者要多加回測練習,加強對ICT概念的掌握。文章涵蓋了豐富的交易策略和理論知識,適合投資熱衷者閱讀。
Thumbnail
學習K線圖的好處是能夠在這項技能當中研判各國股市、匯率或個股的趨勢脈動,因K棒的形成是真金白銀打出來的型態,就是最真實的市場的反映,若將K棒及成交量結合,就能掌握大部分市場的走向,未來您可以做波段或是當沖交易都適用,就不需要再聽任何消息能夠自己做判斷。
Thumbnail
學習K線圖的好處是能夠在這項技能當中研判各國股市、匯率或個股的趨勢脈動,因K棒的形成是真金白銀打出來的型態,就是最真實的市場的反映,若將K棒及成交量結合,就能掌握大部分市場的走向,未來您可以做波段或是當沖交易都適用,就不需要再聽任何消息能夠自己做判斷。
Thumbnail
交易回測是執行各種交易重要一環,這裡主要採用自行開發的Excel回測工具進行歷史資料模擬各種市場情境,包括事件觸發、MSIC季度調整、聯準會升降息以及技術籌碼面的變化。透過反覆的回測過程,可以深入瞭解各種情況下的交易策略執行情況,並逐步優化其交易策略。這有助於建立交易的紀律性,
Thumbnail
交易回測是執行各種交易重要一環,這裡主要採用自行開發的Excel回測工具進行歷史資料模擬各種市場情境,包括事件觸發、MSIC季度調整、聯準會升降息以及技術籌碼面的變化。透過反覆的回測過程,可以深入瞭解各種情況下的交易策略執行情況,並逐步優化其交易策略。這有助於建立交易的紀律性,
Thumbnail
交易訊不會無中生有、憑空想像而出現,通常會將想要觀察的指標疊加在線圖上,再由圖上去找買賣規則的靈感,此篇就以前二篇開發連續創高或連續創低的指標來開發交易訊號。
Thumbnail
交易訊不會無中生有、憑空想像而出現,通常會將想要觀察的指標疊加在線圖上,再由圖上去找買賣規則的靈感,此篇就以前二篇開發連續創高或連續創低的指標來開發交易訊號。
Thumbnail
有沒有想過,當你在YouTube訂閱了一個頻道,每當有新影片,你就會得到通知呢?這背後就是觀察者模式在運作!
Thumbnail
有沒有想過,當你在YouTube訂閱了一個頻道,每當有新影片,你就會得到通知呢?這背後就是觀察者模式在運作!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News