码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-06-11 00:42:04      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:状态模式   new   ons   name   clu   his   load   hand   pst   

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 State\Context;
use State\StartState;
use State\StopState;

$context = new  Context();

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

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

 

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

标签:状态模式   new   ons   name   clu   his   load   hand   pst   

原文地址:https://www.cnblogs.com/zhouqi666/p/9164932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!