微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

观察者模式主要用于解耦

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的事件机制

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐