アプリケーション 2019-04-20 ⏱ 約 2 分

PHPで学ぶデザインパターン - Stateパターン

「PHPで学ぶデザインパターン Advent Calendar 2018」の記事の1つで、Stateパターンを取り上げます。状態ごとの処理をそれぞれ別のクラスにカプセル化することで、状態に応じた振る舞いの切り替えを条件分岐に頼らず実現するこのパターンの仕組みと、PHPでの実装方法を解説します。

Read in: en
PHPで学ぶデザインパターン - Stateパターン

概要

PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。

Stateパターンとは

状態をクラスで用意することで振る舞いを切り替えることができるようなパターン。

実装

スイッチのオンオフの状態を切り替えるような例を想定した。 シングルトンを使ったほうが良い気がする。

<?php

class OnState
{
    public function getState()
    {
        return 'ON';
    }

    public function getNextState()
    {
        return new OffState();
    }
}

class OffState
{
    public function getState()
    {
        return 'OFF';
    }

    public function getNextState()
    {
        return new OnState();
    }
}

class Light
{
    public function __construct()
    {
        // デフォルトの状態クラスをセット
        $this->state = new OffState();
    }

    public function getState()
    {
        return $this->state->getState();
    }

    public function toggle()
    {
        $this->state = $this->state->getNextState();
    }
}


$light = new Light();

echo $light->getState(); // OFF
echo $light->toggle();
echo $light->getState(); // ON
echo $light->toggle();
echo $light->getState(); // OFF

状態クラスは状態固有の処理を持つイメージ。

複数の状態があり、それぞれ固有の処理が複雑してきた時に検討できそうなパターンかと思う。

所感

デザインパターンの中でもなぜだか一番好きなパターン。 使ってみたくなるような面白さがある気がする。

参考

Tags: GoF PHP デザインパターン
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事