首页 > Web开发 > 详细

php设计模式 之观察者模式 与Laravel 的事件

时间:2021-04-05 00:49:16      阅读:29      评论:0      收藏:0      [点我收藏+]

观察者模式主要用于解耦

1 没有观察者模式

class order
{
    public  function addOrder()
    {
        // 发短信
        Message::update();
        //发邮件
        Email::update();
        //记日志
        Log::update();
    }
   
    
}
$order = new order();
$order->addOrder();

2 观察者模式

2.1 被观察者 order

//被观察者
interface Observable
{
    //添加观察者实例
    function add();
    //删除观察者实例
    function del();
    //通知观察者
    function notify();
}

//订单类继承被观察者接口
class order implements Observable
{
    private $instance = array();
    //添加观察者实例
    function add(observe $observe)
    {
        // TODO: Implement add() method.
        $key = array_search($observe,$this->instance);
        if ($key === false){
            $this->instance[] = $observe;
        }
    }
    //删除观察者实例
    function del(observe $observe)
    {
        // TODO: Implement del() method.
        $key = array_search($observe,$this->instance);
        if ($key !== false){
            unset($this->instance[$key]);
        }
    }
    //通知观察者实例
    function notify()
    {
        // TODO: Implement notify() method.
        foreach ($this->instance as $key => $val){
            //调用实例化对象的update方法
            $val->update();
        }
    }
}

2.2 观察者 Email 、Message

/**
 * Interface observe
 * 定义一个观察者
 */
interface observe()
{
   //每个实例化对象都有update方法
   function update();
}

class Email implements observe
{
    function update()
    {
        echo "订单修改了,发送邮件";
    }
}
class Message implements observe
{
    function update()
    {
        echo "订单修改了,发送短信";
    }
}

2.3 客户端调用

$order = new order();
$order->add(new Email());
$order->add(new Message());
$order->del(new Email());
$order->notify();

3 Laravel的事件机制

 

php设计模式 之观察者模式 与Laravel 的事件

原文:https://www.cnblogs.com/polax/p/14617122.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!