Observer は、 振る舞いに関するデザインパターンの一つで、 オブジェクトが別のオブジェクトに状態の変化を通知できるようにします。
Observer パターンは、 サブスクライバー・インターフェースを実装するいかなるオブジェクトのイベント通知の申し込みと停止をする方法を提供します。
概念的な例
電子商取引のウェブサイトでは、 商品が時々在庫切れになります。 在庫切れとなった商品に興味を持っていた顧客にどう対処するかという問題には三つの解決策があります:
- 顧客に入荷したかどうかを定期的にチェックしてもらう。
- 電子商取引サイトが、 新商品入荷のメールを多数送りつける。
- 顧客は興味のある特定商品のみに関して、 入荷したら通知を受けるよう登録する。 複数の顧客が同一商品に通知登録することも可能。
三つ目の解決策が一番妥当で、 これこそが Observer パターンです。 Observer パターンの主要構成要素は:
- サブジェクトは、 何かが起きた時にイベントを発行するインスタンスです。
- オブザーバーは、 サブジェクトのイベントの通知を申し込み、 イベントが起きると通知されます。
subject.go: サブジェクト
item.go: 具象サブジェクト
observer.go: オブザーバー
customer.go: 具象オブザーバー
main.go: クライアント・コード
output.txt: 実行結果
他言語での Observer