设计模式之状态模式(PHP实现)

Posted 周起

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之状态模式(PHP实现)相关的知识,希望对你有一定的参考价值。

github地址:https://github.com/ZQCard/design_pattern
/**
 * 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
 * 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
 * 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
 */

(1)State.class.php(接口,规定实现方法)

<?php

namespace State;

interface State
{
    public function doAction(Context $context);
}

(2)Context.class.php (带有某个状态的类)

<?php

namespace State;

class Context
{
    private $state;

    public function __construct()
    {
        $this->state = null;
    }

    public function setState(State $state)
    {
        $this->state = $state;
    }

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

(3)StartState.class.php(具体的开始状态类)

<?php

namespace State;

class Context
{
    private $state;

    public function __construct()
    {
        $this->state = null;
    }

    public function setState(State $state)
    {
        $this->state = $state;
    }

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

(4)StopState.class.php(具体的结束状态类)

<?php

namespace State;

class StopState implements State
{
    public function doAction(Context $context)
    {
        echo "Player is in stop state";
        $context->setState($this);
    }


    public function handle()
    {
        return ‘stop state‘;
    }
}

(5)state.php(客户端类)

<?php

spl_autoload_register(function ($className){
    $className = str_replace(‘\‘,‘/‘,$className);
    include $className.".class.php";
});

use StateContext;
use StateStartState;
use StateStopState;

$context = new  Context();

$startState = new StartState();
$startState->doAction($context);
$context->getState()->handle();

$startState = new StopState();
$startState->doAction($context);
$context->getState()->handle();

 

以上是关于设计模式之状态模式(PHP实现)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之观察者模式(php实现)

设计模式之状态模式

PHP 设计模式之观察者模式

游戏设计模式之三 状态模式有限状态机 & Unity版本实现

设计模式之状态模式

Java 设计模式之状态学习与掌握