デザインパターン-State
Stateパターンとは
Stateパターンとは、状態をクラスで表現して、状態の変化に応じて振る舞い(処理)を変化するパターンです。
状態を表現するオブジェクトが、内包するその状態オブジェクトを切り替えることにより、処理内容(振る舞い)を変えられるようにします。
「State」とは「状態」を意味します。
状態1つに対してクラス1つで表現して、状態と処理を分割することで可読性のあるソースコードとなります。
構成要素
- State(状態)
- 状態を表すクラスです。
- 状態毎に振舞いが異なるメソッドのインタフェースを定義します。
- ConcreteState(具体的な状態)
- 具体的な状態を「1クラスにつき1状態」で定義します。
- Context(状況判断)
- 現在の状態を保持します。
- Client(利用者)
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
関連ページ
- デザインパターン
- デザインパターン-Iterator
- デザインパターン-TemplateMethod
- デザインパターン-ChainOfResponsibility
- デザインパターン-Command
- デザインパターン-Interpreter
- デザインパターン-Mediator
- デザインパターン-Memento
- デザインパターン-Observer
- デザインパターン-State
- デザインパターン-Strategy
- デザインパターン-Visitor