首页 > 其他分享 >SplObserver 和 SplSubject 接口实现观察者模式

SplObserver 和 SplSubject 接口实现观察者模式

时间:2024-07-23 10:19:12浏览次数:21  
标签:function observer SplObserver 观察者 name SplSubject public subject

<?php

class Subject implements SplSubject {
    private $observers = [];
    private $state;

    public function attach(SplObserver $observer) {
        $this->observers[] = $observer;
    }

    public function detach(SplObserver $observer) {
        foreach ($this->observers as $key => $obs) {
            if ($obs === $observer) {
                unset($this->observers[$key]);
            }
        }
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }

    public function setState($state) {
        $this->state = $state;
        $this->notify();
    }

    public function getState() {
        return $this->state;
    }
}

class Observer implements SplObserver {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function update(SplSubject $subject) {
        echo "观察者==》{$this->name} 开始执行事件: " . $subject->getState() . "\n";
    }
}

// 创建主题
$subject = new Subject();

// 创建观察者
$observer1 = new Observer("观察者 1");
$observer2 = new Observer("观察者 2");

// 将观察者添加到主题
$subject->attach($observer1);
$subject->attach($observer2);

// 改变状态
$subject->setState("事件");

输出

标签:function,observer,SplObserver,观察者,name,SplSubject,public,subject
From: https://www.cnblogs.com/qcy-blog/p/18317679

相关文章

  • 职责链、命令和观察者设计模式的区别
    职责链、命令和观察者是三种不同的设计模式,它们各自解决不同类型的问题。下面分别介绍这三种设计模式的特点和区别:1.职责链模式(ChainofResponsibility)定义:职责链模式是一种行为设计模式,它通过将请求的处理者组织成一个链,使得请求可以沿这条链传递,直到有一个处理者处理......
  • 设计模式之观察者模式(学习笔记)
    定义观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。这种模式用于实现对象之间的解耦,使得一个对象的变化可以通知并更新多个依赖对象,而无需直接引用它们。为什么使用观察者模式?解耦观......
  • 观察者模式实战:Spring Boot中联动更新机制的优雅实现
    引言在许多应用系统中,我们经常需要处理多个表之间的关联更新问题。例如,在教育管理系统中,当学生的基本信息表中的年龄字段发生更改时,我们可能还需要同步更新学生档案表和学生成绩表中的相关信息。本文将通过一个具体的案例,介绍如何在SpringBoot项目中利用观察者模式来优雅地解......
  • 《C++20设计模式》观察者模式
    一、前言观察者模式感觉真的很难,我这里就实现书上差不多的例子,供大家学习吧!相关代码可以在这里,如有帮助给个star!AidenYuanDev/design_patterns_in_modern_Cpp_20二、实现这里说一下观察者模式是干什么的。在实际中很有用,比如以下的例子。当股票价格变化时,自动通知所有......
  • C++单例模式、工厂模式、观察者模式等的实现和应用场景。
    设计模式是软件开发中常用的解决方案,它们提供了一些经过验证的方法来解决常见的设计问题。以下是单例模式、工厂模式和观察者模式在C++中的实现和应用场景的详细讲解。1.单例模式(SingletonPattern)概念单例模式确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。......
  • 设计模式-观察者模式
    一、观察者模式的核心思想观察者(Observer)模式又名发布一订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,让多个观察者对象同时关注同一个对象,当该对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。如下图所示,观......
  • 设计模式-观察者模式
    观察者模式观察者模式(ObserverPattern),又叫发布-订阅(Publisher/Subscribe)模式,模型-视图模式,源-监听器模式或从属者模式。定义一种一对多的依赖关系,一个主题对象可以同时被多个监听者同时监听,使得每当主题对象状态发生变化时,所有依赖于它的对象都会得到通知并被自动更新。属于行为......
  • 设计模式——观察者模式(发布/订阅模式)
    观察者模式(发布/订阅模式)是一种行为模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使得它们能够自动......
  • c/c++设计模式---观察者模式
    namespace_nmsp1{classFighter;//类前向声明list<Fighter*>g_playerList;//玩家父类(以往的战斗者类)classFighter{public:Fighter(inttmpID,stringtmpName):m_iPlayerID(tmpID),m_sPlayerName(tmpName)//构造函数......
  • 51.《一篇浅浅的搞懂Android四大组件之一内容提供者和观察者》
    一内容提供者背景:之前提到过内容提供者就是在访问数据的时候那么它因何诞生我们之前的数据访问像SQLite之类访问都是在当前应用程序访问那则么能行而其他应用程序之间的访问就需要这一组件的帮助画的有点粗糙但大致就是这样工作的B通过ContentResolver类访问A中Conte......