代码如下:
<?php header("Content-Type:text/html;charset=utf-8"); require_once "State.php"; $state = new State(); // 积分为 500的时候 $state->score = 500; $state->Grade(); // 积分为1000的时候 $state->score = 1000; $state->Grade(); // 积分为10000的时候 $state->score = 100000; $state->Grade(); <?php // 状态接口 interface IState { /** * 显示等级接口函数 子类必须执行 * @access public * @param object $A */ public function Grade(State $A); } // 等级黄金 Class Golden implements IState { /** * 显示等级 * @access public * @param object $A */ public function Grade(State $A) { if($A->score > 0 && $A->score < 1000) { echo "{$A->score}点积分,黄金会员<br/>"; } else { // 超出等级 进入下级 $A->SetState(new Platinum()); $A->Grade(); } } } // 等级铂金 Class Platinum implements IState { /** * 显示等级 * @access public * @param object $A */ public function Grade(State $A) { if($A->score < 10000 && $A->score >= 1000) { echo "{$A->score}点积分,铂金会员<br/>"; } else { // 超出等级 进入下级 $A->SetState(new Diamond()); $A->Grade(); } } } // 等级钻石 Class Diamond implements IState { /** * 显示等级 * @access public * @param object $A */ public function Grade(State $A) { if($A->score >= 10000) { echo "{$A->score}点积分,铂金会员<br/>"; } } } // 统一状态类 Class State { /** * 初始化对象 * @var object */ private $first; /** * 积分值 * @var int */ public $score; /** * 构造函数 初始化 * @access public */ function __construct() { $this->first = new Golden(); } /** * 设置下级等级 * @access public * @param object $s */ function SetState(IState $s) { $this->first = $s; } /** * 显示等级 * @access public */ function Grade() { $this->first->Grade($this); } }输出结果:
500点积分,黄金会员1000点积分,铂金会员100000点积分,铂金会员
