State パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Mementoからの続き。

プログラミングで用いられる振る舞いに関する(英語版) デザインパターンの一種である。このパターンはオブジェクトの状態(state)を表現するために用いられる。ランタイムでそのタイプを部分的に変化させるオブジェクトを扱うクリーンな手段となる

クラス図

State PlantUML

書籍側の方のコードだと PHP で実装がしにくかったので以下のリンク参考に書いた

自分としての理解・疑問

  • 状態によって分岐するのではなく状態自体でクラス化して振る舞いをつけていくという感じ。
  • 単純化するとわかりやすいけど設計するにあたってここまで頭が働くかな、情報量が多い。
  • 書籍の中にある疑似コードがすごい分りやすいのでオススメ
<?php

class 昼間という状態を表すClass {
    public function 金庫使用時に呼ばれるMethod() {
        // 警備センターに利用の記録
    }
    public function 非常ベル使用時に呼ばれるMethod() {
        // 警備センターに非常ベルの通報
    }
    public function 通常通話時に呼ばれるMethod() {
        // 警備センターの呼び出し
    }
}
class 夜間という状態を表すClass {
    public function 金庫使用時に呼ばれるMethod() {
        // 警備センターに非常事態の通報
    }
    public function 非常ベル使用時に呼ばれるMethod() {
        // 警備センターに非常ベルの通報
    }
    public function 通常通話時に呼ばれるMethod() {
        // 警備センターの留守録呼び出し
    }
}