设计模式之状态模式(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实现)的主要内容,如果未能解决你的问题,请参考以下文章