+ -
当前位置:首页 → 问答吧 → 【一天一个设计模式】05- 状态模式

【一天一个设计模式】05- 状态模式

时间:2008-11-11

来源:互联网

<?php
//积分基础类
class Point
{
    //积分
    public $point;

    public function showPoint()
    {
        //列出用户的积分
    }
    public function showUseRecord()
    {
        //列出用户的积分使用记录
    }

}
--------------------------------------------------------------------------
//积分低于500的类
class Point500 extends Point
{
   
    //显示提示
    public function showTips()
    {
            echo "客户发帖等行为可以增加积分";
    }
    //显示按钮
    public function showButton()
    {
            echo "";
    }
}

//积分大于500,低于1000的类
class Point600 extends Point
{
   
    //显示提示
    public function showTips()
    {
            echo "可以行使标准用户的权利";
    }
    //显示按钮
    public function showButton()
    {
            echo "标准用户功能的按钮";
    }
}

//积分大于1000的类
class Point1000 extends Point
{
   
    //显示提示
    public function showTips()
    {
            echo "可以行使高级用户的权利";
    }
    //显示按钮
    public function showButton()
    {

            echo "高级用户的按钮";
    }
}
--------------------------------------------------------------------------
//应用环境类,简单的理解为调用环境就可以了
class Context
{
    //积分对象
    public $pointObj;

    //设置一个积分对象
    public function setPointObj($point)
    {
        //低于500
        if ($point<500) {
            $this->pointObj = new Point500();
        }
        //大于1000
        elseif ($point>1000) {
            $this->pointObj = new Point1000();
        }
        //大于500,低于1000
        else {
            $this->pointObj = new Point600();
        }
    }

    public function showPoint()
    {
        $this->pointObj->showPoint();
    }

    public function showUseRecord()
    {
        $this->pointObj->showUseRecord();
    }

    //显示提示
    public function showTips()
    {
       $this->pointObj->showTips();
    }

    //显示按钮
    public function showButton()
    {
        $this->pointObj->showButton();
    }

}

--------------------------------------------------------------------------

$context = new Context();
$context->setPointObj(780);
//显示提示
$context->showTips();
?>



优点:更好的阅读,扩展,已经封装~~!

作者: kakashilw   发布时间: 2008-11-11

不错。。。实例很典型。。。。

作者: 0hudu   发布时间: 2008-11-17

这个模式为何与你之前发的“策略模式”这么像?

作者: phper222   发布时间: 2008-11-21

学习

作者: zhaofei299   发布时间: 2009-09-14