首页 > 其他分享 >观察者模式

观察者模式

时间:2023-02-11 20:12:28浏览次数:50  
标签:function observer 观察者 模式 public observers event

观察者模式 发布/订阅模式:当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新

https://www.jianshu.com/p/32d56565389c

<?php

/**
 * 声明观察者接口,只有一个update方法,事件更新之后触发
 * Interface Observe
 */
interface Observer{
    public function update();
}

/**
 * 声明抽象类,用于被子类继承
 * Class Event
 */
abstract class Generators{

    //观察者列表
    private $observers = [];
    //添加观察者
    public function addObserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    //删除观察者
    public function removeObserver($observer)
    {
        if($observer){
            $key = array_search($observer, $this->observers);
            if($key){
                array_splice($this->observers, $key, 1);
            }
        }
    }

    //执行操作
    public function notify(){
        foreach ($this->observers as $v){
            $v->update();
        }
    }
}

class Event extends Generators
{
    public function action(){
        $this->notify();
    }
}

//观察者1
class observer1 implements Observer
{
    public function update()
    {
        echo '我是第一个观察者<br />';
    }
}
class observer2 implements Observer
{
    public function update()
    {
        echo '我是第二个观察者<br />';
    }
}
$event = new Event();
//添加观察者
$event->addObserver(new Observer1());
$event->addObserver(new Observer2());

//被观察者做出动作时,观察者就会收到相应通知
$event->action();

标签:function,observer,观察者,模式,public,observers,event
From: https://www.cnblogs.com/kaikaiya/p/17112460.html

相关文章

  • HISI3520DV300 折腾记录(二)之《内存映射、存储(DDRC,FMC)、启动模式分析》
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • Linux Daemon & 单例模式 设计与实现
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 好客租房67-render-props模式-3演示mouseover的组件的复用
    //导入reactimportReactfrom'react'importReactDOMfrom'react-dom'//导入组件//约定1:类组件必须以大写字母开头//约定2:类组件应该......
  • 好客租房65-render-props模式-1思路分析
    1思路:将要复用的state和操作state的方法封装到一个组件中如何拿到该组件复用的state在使用组件时,添加一个值为函数的props通过函数参数来获取<Mouserender={{mouse}=>{}......
  • 好客租房68-render-props模式-4children代替
    注意:并不是该模式renderProps就必须使用名为render的props,实际上可以使用任意名称props把props是一个函数并且告诉组件渲染什么内容的技术叫做renderprops模式推荐使用ch......
  • 状态模式
    我们把影响对象行为的一个或多个动态变化的属性称为状态,状态模式所处理的对象是有状态的,当然状态复杂才能体现出模式的精髓。简单一点例子就是等红路灯namespace状态模......
  • vue2的数据绑定是通过数据劫持和观察者模式实现的。(先感受到变化,再去渲染)
     1、数据劫持:当把一个普通的JavaScript对象(json)传入Vue实例作为data选项,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为getter/set......
  • CSS架构之BEM设计模式
    为什么需要CSS架构?其实在日常开发CSS当中,会遇到许多的问题,使用设计模式能够很好的解决。例如在日常开发项目,需要组件化时,组件内部的class样式类管理就非常的杂乱。大部分......
  • 野火STM32 ADC独立模式单通道采集实验意外
    1//aboutcalibration2//ADC_ResetCalibration(ADC1);3//while(ADC_GetResetCalibrationStatus(ADC1)!=SET);4ADC_StartCalibration(ADC1);5......
  • 单例模式
    [Java单例模式详解]概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能......