状态模式
Posted 落叶成冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了状态模式相关的知识,希望对你有一定的参考价值。
<?php
// 状态模式
class State
// 有效状态常量值
const st_dev = 0;
const st_deploy = 1;
const st_debug = 2;
private $st = -1; //初始状态-1
public function __construct($st=null)
if(!is_null($st))
$this->st = $st;
// state setter
public function setStatus($st)
$this->st = $st;
// state getter
public function getStatus()
return $this->st;
// ---------------------------------------------
// 不同的状态值对应不同的动作
// ---------------------------------------------
// dev state
public function actDev()
echo 'state = <b>dev</b><br/>';
// deploy state
public function actDeploy()
echo 'state = <b>deploy</b><br/>';
// debug state
public function actDebug()
echo 'state = <b>debug</b><br/>';
class Context
private $state;
public function __construct(State $st)
$this->state = $st;
public function setState(State $st)
$this->state = $st;
public function getState()
return $this->state;
// 根据不同的状态采取不同的动作
public function doAct()
$st = $this->state->getStatus(); // 获取当前状态值
switch($st)
case State::st_dev:
$this->state->actDev();
break;
case State::st_deploy:
$this->state->actDeploy();
break;
case State::st_debug;
$this->state->actDebug();
break;
default:
echo 'state error!<br/>';
// test code
$st = new State(State::st_dev);
$ctx = new Context($st);
$ctx->doAct();
// change
$st->setStatus(State::st_deploy);
$ctx->doAct();
以上是关于状态模式的主要内容,如果未能解决你的问题,请参考以下文章