分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

PHP设计模式:观察者模式

发布时间:2023-09-06 01:28责任编辑:胡小海关键词:PHP
首先来看个栗子:

//事件class EventDemo{    //触发了新事件    public function trigger()    {        echo "Event happening\r";        echo "后续业务更新逻辑1\r\n";        echo "后续业务更新逻辑2\r\n";        echo "后续业务更新逻辑3\r\n";    }}


场景:当事件发生变化时,触发其他业务进行相关的操作

特征1.所有业务代码都是入侵式的,直接放置于核心业务当中。

        2.耦合度太高,不便于管理维护。需要一件一件事去做处理。

        


于是我们可以这样假设:

假如后续业务都是都是该事件的关注者,当事件发生改变,只需要通知到观察者即可。其他的工作由观察者自行完成。

类似发布--订阅这种模式。



代码实现:

步骤1.定义观察者接口

步骤2.定义观察者类

步骤3.定义事件产生器(抽象类)

步骤4.定义事件场景类(继承并实现事件产生器抽象类)

步骤5.实例化运用
            实例化事件场景-->添加观察者-->通知


            


定义观察者接口

/** * 定义观察者接口(观察对象为事件发生者) *Interface Observer */interface Observer{    /**     * 事件发生时,进行更新操作     * @param null $eventInfo 发生事件的信息     * @return mixed     */    public function update($eventInfo = null);}

定义观察者类

//定义多个观察者class Observer1 implements Observer{    public function update($eventInfo = null)    {        echo "观察者1:准备开始{$eventInfo}<br> \r\n";    }}class Observer2 implements Observer{    public function update($eventInfo = null)    {        echo "观察者2:准备开始{$eventInfo}<br> \r\n";    }}


定义事件产生器(抽象类)

/** * 事件产生者(抽象类) * Class EventGenerator */abstract class EventGenerator{    private $observers = [];//事件的所有观察者    /**     * 增加观察者     * @return mixed     */    public function addObserver(Observer $observer)    {        $this->observers[] = $observer;    }    /**     * 通知事件发生了,其他观察者接到通知后更新业务逻辑     * @return mixed     */    public function notify($eventInfo)    {        foreach ($this->observers as $observer) {            $observer->update($eventInfo);        }    }}


定义事件场景类(继承并实现事件产生器抽象类)

/** * 定义事件类(继承事件产生者类) * Class Event */class Event extends EventGenerator{    public function trigger($eventInfo)    {        echo "事件 :{$eventInfo} 即将发生,通知观察者们做好更新准备<br>\r\n";        $this->notify($eventInfo);        echo "<br/>";    }}


主业务场景的实现

$event = new Event();//此处可以动态添加、删除观察者$event->addObserver(new Observer1());//$event->addObserver(new Observer2());//此处可以发生任意多个事件$event->trigger('吃饭');$event->trigger('喝水');$event->trigger('走路');


至此,我们可以看到在主业务场景中,只需要简单的管理(添加、删除)观察者,管理(添加、删除)发生事件就可以实现简化代码逻辑,减少耦合完成任务。更好的好处是,业务代码解耦合,便于后期的维护扩展。

PHP设计模式:观察者模式

原文地址:http://blog.51cto.com/phpme/2046280

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved