Ruby
Gem
デザインパターン

本日のお題


オブザーバーパターン🔎


オブザーバーパターン

オブジェクト間の1対多の依存関係を定義し、あるオブジェクトの状態が変化すると、それに依存しているすべてのオブジェクトが自動的に通知され更新されるようにします。

by Head First デザインパターン


クラス図

スクリーンショット 2017-06-22 15.21.43.png


サンプルコード

https://github.com/Islands5/design_pattern_samples/blob/master/observer/main.rb


使われ所


mail


コードを見てみよう!!

mailはSubjectの実装を提供、Observerはgemには内包されてない。
少し崩したパターン
スクリーンショット 2017-06-23 15.40.15.png

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募集中!


参考


デザパタ入門シリーズ