状态模式

  今天突然发现状态模式原来是这么好用的.具体的原理这里就不说了,可以去看
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();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值