zoukankan      html  css  js  c++  java
  • PHP设计模式之观察者模式

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己
     
    应用场景:当一个对象的改变需要同事改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。
    观察者模式所作的工作其实就是在接触耦合。让耦合的双方都依赖于抽象类,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化
     
    1:观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。 
    2:场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。 
    3:观察者模式实现了低耦合,非侵入式的通知与更新机制。 
    EventGenerator.php //定义一个抽象类
    <?php
    
    abstract class EventGenerator{
    
        private $observers = array();
    
        function addObserver(Observer $observer){
            $this->observers[]=$observer;
        }
    
        function notify(){
            foreach ($this->observers as $observer){
                $observer->update();
            }
        }
    
    }
    Observer.php //定义一个观察者接口
    <?php
    
    interface Observer{
        function update(); //这里就是在事件发生后要执行的逻辑
    }
    <?php
    //入口页 一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件
    //继承抽象类
    class Event extends EventGenerator{
    
        function triger(){
            echo "Event<br>";
        }
    
    }
    //继承观察者接口
    class Observer1 implements Observer{
    
        function update(){
            echo "逻辑1<br>";
        }
    }
    //继承观察者接口
    class Observer2 implements Observer{
        function update(){
            echo "逻辑2<br>";
        }
    }
    
    $event = new Event();
    $event->addObserver(new Observer1());
    $event->addObserver(new Observer2());
    $event->triger();
    
    $event->notify();

    当某个事件发生后,需要执行的逻辑增多时,可以以松耦合的方式去增删逻辑。也就是观察者接口部分,只需要定义一个实现了观察者接口的类,实现复杂的逻辑,然后在接口类增加新接口业务接口。这样实现了低耦合。

  • 相关阅读:
    [pixhawk笔记]8-半物理仿真环境
    Python超参数自动搜索模块GridSearchCV上手
    Oriented Response Networks 阅读笔记(一)
    聚类算法评价指标学习笔记
    基于sklearn的常用分类任务指标Python实现
    使用h5py库读写超过内存的大数据
    基于MXNet使用自己的图像数据集训练网络--准备数据与撰写预处理脚本
    在Ubuntu操作系统中添加环境变量
    Jetson TK1 开发板初用体会
    一条脚本搞定OpenCV
  • 原文地址:https://www.cnblogs.com/cutcop/p/13207909.html
Copyright © 2011-2022 走看看