laravel之观察者模式

观察者模式

laravel的事件提供了一个简单的观察者实现,能够订阅和监听应用中发的各种事件。

什么是观察者模式:

观察者模式(Observer),当一个对象状态发生改变时,依赖他的对象会全部收到通知,并自动更新。

场景:一个事件发生后,要执行一连串的更新操作,传统的编程方式,就是在事件的代码之后直接加入逻辑处理,当更新的逻辑增多后,代码会变得很臃肿和难以维护,这种方式是耦合的,侵入式的,增加新的逻辑,需要改变事件主题的代码。这时,需要用到观察者模式。

观察者模式实现了低耦合,非侵入式的通知与更新机制

具体实现代码

/**
 * 观察者接口类
 * Interface ObServer
 */
interface ObServer
{
    public function update($event_info = null);
}

/**
 * 观察者1
 */
class ObServer1 implements ObServer
{
    public function update($event_info = null)
    {
        echo "观察者1 收到执行通知 执行完毕!\n";
    }
}

/**
 * 观察者1
 */
class ObServer2 implements ObServer
{
    public function update($event_info = null)
    {
        echo "观察者2 收到执行通知 执行完毕!\n";
    }
}

/**
 * 事件
 * Class Event
 */
class Event
{

    //增加观察者
    public function add(ObServer $ObServer)
    {
        $this->ObServers[] = $ObServer;
    }

    //事件通知
    public function notify()
    {
        foreach ($this->ObServers as $ObServer) {
            $ObServer->update();
        }
    }

    /**
     * 触发事件
     */
    public function trigger()
    {
        //通知观察者
        $this->notify();
    }
}

//创建一个事件
$event = new Event();
//为事件增加旁观者
$event->add(new ObServer1());
$event->add(new ObServer2());
//执行事件 通知旁观者
$event->trigger();

在laravel中使用事件

在laravel中使用事件,直接上代码:

php artisan make:event // 创建事件
php artisan make:listener // 创建事件监听者,可以为多个。

laravel时间类保存在app/Events目录下,这些事件的监听保存在app/Listerers目录下。

// 在程序需要触发事件的地方通过event()触发事件,比如注入给用户发送站内信的事件,发送邮件的事件

event(new SendMailEvent());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容