Goでオブザーバーパターンを実装する方法
Go言語では、インターフェースとチャネルを使用してオブザーバーパターンを実装できます。
まず、Observerインターフェースを定義する。そこには更新メソッドが含まれ、被観察者からの通知を受け取る。
type Observer interface {
Update(string)
}
次に、Observer構造体を定義します。これには、登録されたすべてのObserverを格納するObserverスライスが含まれています。
type Subject struct {
observers []Observer
}
func (s *Subject) Attach(observer Observer) {
s.observers = append(s.observers, observer)
}
func (s *Subject) Notify(message string) {
for _, observer := range s.observers {
observer.Update(message)
}
}
次に、Observerインタフェースの更新メソッドを実装した具体的なObserver構造体を作ります。
type ConcreteObserver struct {
name string
}
func (co *ConcreteObserver) Update(message string) {
fmt.Printf("%s received message: %s\n", co.name, message)
}
最後にオブザーバ・オブジェクトを生成して複数のオブザーバ・オブジェクトを登録し、オブザーバのNotifyメソッドを起動して通知を行います。
func main() {
subject := &Subject{}
observer1 := &ConcreteObserver{name: "Observer 1"}
observer2 := &ConcreteObserver{name: "Observer 2"}
subject.Attach(observer1)
subject.Attach(observer2)
subject.Notify("Hello, observers!")
}
上記コードを実行すると、出力結果が表示されます。
Observer 1 received message: Hello, observers!
Observer 2 received message: Hello, observers!
これは、Go言語でオブザーバーパターンを実装する方法の一例です。オブザーバーインターフェースとオブザーブ対象構造体を定義して、具体的なオブザーバー構造体を用いてオブザーバーパターンの機能を実装しました。