<?php /** * 状态模式 * 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类 */ /*接口*/ interface State { public function handle($state);//切换到下一个状态 public function display();//显示当前状态 } /*状态A*/ class StateA implements State { public function handle($context) { $context->setState(new StateB()); } public function display() { echo "state A<br />"; } } /*状态B*/ class StateB implements State { public function handle($context) { $context->setState(new StateC()); } public function display() { echo "state B<br/>"; } } /*状态C*/ class StateC implements State { public function handle($context) { $context->setState(new StateA()); } public function display() { echo "state C<br/>"; } } class Context { private $_state = null; public function __construct($state)//给初始状态 { $this->setState($state); } public function setState($state)//设置状态的函数 { $this->_state = $state; } public function request()//执行显示状态并切换状态 { $this->_state->display(); $this->_state->handle($this); } } // 实例化一下 $objContext = new Context(new StateB()); $objContext->request(); $objContext->request(); $objContext->request(); $objContext->request(); $objContext->request(); ?>