状态模式

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值