本日のお題
オブザーバーパターン🔎
オブザーバーパターン
オブジェクト間の1対多の依存関係を定義し、あるオブジェクトの状態が変化すると、それに依存しているすべてのオブジェクトが自動的に通知され更新されるようにします。
by Head First デザインパターン
クラス図
サンプルコード
使われ所
- ActionMailerの内部等で使われてる
- emailを生成、パース、送信するためのライブラリ
- https://github.com/mikel/mail
コードを見てみよう!!
mailはSubjectの実装を提供、Observerはgemには内包されてない。
少し崩したパターン
moduleメソッドを駆使して実装
https://github.com/mikel/mail/blob/76b1e6c19e582c65c9032594054e56acb08d97fe/lib/mail/mail.rb
オブザーバーはテストコードに
https://github.com/mikel/mail/blob/21222e1b48f08f6f848d26643d6b6fb1d873d18c/spec/mail/message_spec.rb#L1786
まとめ
- あまりサーバーサイドで使われない?(gemとかサーチしてみた雰囲気)
- フロントエンドでイベント伝搬等と相性がよさげ
絶賛、教科書的に実際に使われてるgem募集中!
参考
- Head First デザインパターン
- http://www.techscore.com/tech/DesignPattern/Strategy.html/