はじめに
こんにちは、東京アプリケーションシステム第二ソリューション部のK.T.です。
今回は、Observerデザインパターンということで、Rubyでの実装例を紹介したいと思います。
Observerとは
通知・取得することによって状態の変更を検知するというデザインパターンです。
これを行うことによって何ができるかというと、状態が変更された際の処理をオブジェクトの外部から渡すことができます。
以下のコードは、Rubyの標準添付ライブラリのobserverを使用した実装例です。
追加された値の合計値を保持するCounterクラスを定義し、PrinterクラスでCounterが更新された際に、合計値が偶数であれば現在の数値を表示するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
require "observer" class Counter include Observable def initialize @count = 0 end def add(count) changed @count += count notify_observers(@count) end end class Printer def update(count) puts "#{count} is even number." if count % 2 == 0 end end counter = Counter.new counter.add_observer(Printer.new) (0..10).each do |num| counter.add(num) end |
実行すると以下のような結果が出力されます。
0 is even number.
6 is even number.
10 is even number.
28 is even number.
36 is even number.
まとめ
Observerのデザインパターンを使用することにより、状態の変更を検知する実装が作れました。
他にもさまざまなデザインパターンがあるので、概要だけでも知っておくとソースコードを見た際に、実装意図の理解に役立つと思いますので是非調べてみてください。