观察者模式封装

该博客介绍了如何运用观察者模式来处理订单生成后的通知逻辑。通过创建Email、Log和Message类作为观察者,当订单状态改变时,被观察者Order会通知这些观察者执行相应的操作,如发送邮件、记录日志和发送短信。示例中展示了如何注册和移除观察者以及触发通知的过程。
摘要由CSDN通过智能技术生成
<?php
//开启报错
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);




//观察者模式


//被观察者
interface  Observed
{
    //注册
    public function attach(Observer $observer);

    //删除
    public function detach(Observer $observer);

    //消息通知
    public function notice();

}



//观察者
interface  Observer
{
    //业务处理
    public function update(Observed $observed);
}



//实现观察者提示逻辑
//发送邮件提示
class Email implements  Observer
{
    public function update(Observed $observed)
    {
        if($observed->getState()==1){
            echo "邮件发送成功<br>";
        }
    }
}

//记录日志
class Log implements  Observer
{
    public function update(Observed $observed)
    {
        if($observed->getState()==1){
            echo "日志记录成功<br>";
        }
    }
}

//发送短信
class Message implements  Observer
{
    public function update(Observed $observed)
    {
        if($observed->getState()==1){
            echo "短信发送成功成功<br>";
        }
    }
}






//生成订单
class  Order  implements Observed
{

    //存储观察者对象
    protected $observers=[];
    //存储订单状态
    protected $state=0;


    /**
     * 注册观察者
     */
    public function attach(Observer $observer)
    {
        $key=array_search($observer,$this->observers);

        if($key===false){
            $this->observers[]=$observer;
        }
    }


    /**
     * 删除观察者
     */
    public function  detach(Observer  $observer)
    {
        $key=array_search($observer,$this->observers);

        if($key!==false){
            unset($this->observers[$key]);
        }
    }


    /**
     * 生成订单
     */
    public function addOrder($state){
        $this->state=$state;

        $this->notice();
    }



    public function notice()
    {
        foreach ($this->observers as $observer){
            $observer->update($this);
        }
    }

    /**
     *
     */
    public function getState(){
        return $this->state;
    }


}


$obj=new Order();

$obj->attach(new Email());
$obj->attach(new  Message());
$obj->attach(new Log());

//生成订单
$obj->addOrder(1);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值