min10

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  今天突然发现状态模式原来是这么好用的.具体的原理这里就不说了,可以去看
head first design pattern等.现在举个例子说明之:

    比如有一个系统,需要根据客户的积分来作一些处理,比如如果客户积分大于某个积分,对应的操作为有不同的话,则可以考虑使用状态模式.比如积分<100,100<积分<500,积分>500等时,它们都要执行同样的操作,比如展示信息给用户,但展示的内容不同,则这个时候可以考虑使用状态模式,代码如下
   class point
{

    //积分
    public $point;

    public function showTips()
    {
        //列出用户的积分
    }   

  }

 各个情况的子类继承之

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

//积分大于500,低于1000的类
class Point600 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();
        }
               //大于500,低于1000
        else {
            $this->pointObj = new Point600();
        }
    }

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

 

}

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

posted on 2008-10-28 13:04  min10  阅读(181)  评论(0编辑  收藏  举报