デザインパターン-State



Stateパターンとは

Stateパターンとは、状態をクラスで表現して、状態の変化に応じて振る舞い(処理)を変化するパターンです。

状態を表現するオブジェクトが、内包するその状態オブジェクトを切り替えることにより、処理内容(振る舞い)を変えられるようにします。

「State」とは「状態」を意味します。


状態1つに対してクラス1つで表現して、状態と処理を分割することで可読性のあるソースコードとなります。


構成要素


rubyによるStateパターンの実装

#!/usr/bin/env ruby

# 状態を表すクラス
class State
  def description
    raise "not implemented error."
  end
end

# 具体的な状態を「1クラスにつき1状態」で定義します。 
class RunState < State
  def description
    return("running ...")
  end
end

# 具体的な状態を「1クラスにつき1状態」で定義します。 
class SleepState < State
  def description
    return "sleeping ..."
  end
end

# 状況判断:現在の状態を保持します。
class Context
  def initialize
    @st_run   = RunState.new
    @st_sleep = SleepState.new
    @state    = @st_sleep
  end

  # 状態の切り替え
  def change_state
    if(@state.class == SleepState)
      @state = @st_run
    else
      @state = @st_sleep
    end
  end

  def description
    puts(@state.description)
  end
end

obj = Context.new
obj.description
obj.change_state
obj.description
obj.change_state
obj.description


関連ページ



スポンサード リンク