• このエントリーをはてなブックマークに追加

RubyTkでオブザーバ・パターンを勉強したので、メモします。

スポンサードリンク

やりたいこと

  • RubyTkで、メインウィンドウからサブウィンドウを起動。
  • サブウィンドウから情報(入力フォームに入力された情報など)を取得する。

Ruby初心者の実装

どうやればいいのかわからなかったので、とりあえずクラス変数を使って実装。

依存関係ヌメヌメどろどろの悪い実装。

Ruby中級者の実装

サブウィンドウのオブジェクト生成時に親ウィンドウのオブジェクトのクラスを渡す。

これが普通のやり方かな~。

Ruby知ったかぶりの実装

Ruby, オブジェクト, 通知でググると、observerというライブラリが Ruby標準ライブラリで存在するようだ。

observerとは、ズバリ、Observer Paternをサクッと実装することができるライブラリ。

observerの役割分担

前提として、以下のようにやくわりを持たせる。

  • 観察者 : メインウィンドウ
  • 被観察者 : サブウィンドウ

observerは被観察者、つまり状態の変化を通知するサブウィンドウで実装される。

observerの使い方

以下の4ステップ。

  1. add_observerで観察者と被観察者を結びつける。
  2. 変更があったときにchangedをコール
  3. notify_observersで観察者に通知
  4. 観察者側で定義された updateメソッドがコールされる。引数は3で設定した値。

実装例

正直、2つめと3つめの違いがよくわからない。

オブザーバライブラリを使うことで『オレ・こんなことも知ってるっすよ」という いやらしさがある。

Ruby勉強中の実装

追記。

オブザーバパターンは、一つの観察対象に対して、複数の観測者がいるときに威力を発揮する!

ということで、一つのサブウィンドウから、2つのウィンドウにを通知を送るように修正した。