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();

最新文章

  1. 关于计算机改名无法连接TFS的问题
  2. DescriptionResourcePathLocationType Dynamic Web Module 3.0 requires Java
  3. js页面刷新、前进、后退
  4. 为什么mvc里面的ModelState.IsValid一只都是true
  5. Javascript 笔记与总结(2-14)事件
  6. the essence of the internet idea
  7. 【BZOJ】【1028】【JSOI2007】麻将
  8. 挺好看的CSS
  9. HDU5787 K-wolf Number 数位dp
  10. RMAN数据库异机迁移
  11. webGIS(离线版)研究路线归总
  12. 关于PHP加速eAccelerator、Xcache、APC和Zend Optimizer
  13. 什么是REST架构 - z
  14. Python学习笔记2(控制语句)
  15. php中如何输出当前服务器的(中国)当前时间
  16. C#中实现WebBrowser控件的HTML源代码读写
  17. hdu3652 B-number 数位DP
  18. carryLess开发日记_2017-05-18
  19. AIX系统备份相关知识
  20. Mysql中的force index和ignore index

热门文章

  1. TypeScript 3.0下react默认属性DefaultProps解决方案
  2. [洛谷P3805]【模板】manacher算法
  3. node_module删除
  4. Oracle 根据逗号分隔字符串 同时记录一波坑
  5. delete zone and cfgsave on brocade by CMD
  6. HTTP Basic 机制
  7. Pandas之DataFrame——Part 2
  8. js函数调用与声明 (for时注意)
  9. linux系统查看主机序列号
  10. List的set和add方法