学习php设计模式 php实现观察者模式(Observer)

学习PHP设计模式中的观察者模式需要掌握以下知识点:

  1. 观察者模式是怎样的一种设计模式,以及它的应用场景和作用;
  2. 观察者模式中的关键角色:被观察者(Subject)和观察者(Observer);
  3. 实现观察者模式的具体步骤:定义被观察者和观察者的接口,实现被观察者和观察者的类及其方法。

以下是实现观察者模式的完整攻略:

观察者模式概述

观察者模式是一种常见的行为型设计模式,它用于在对象之间定义一种一对多的依赖关系,这样当一个对象状态发生改变时,所有依赖它的对象都能够得到通知并自动更新。

在实际应用中,观察者模式通常被用于实现事件处理、消息推送、状态更新等功能。

观察者模式中的角色

在观察者模式中,通常有以下几种角色:

  1. Subject(被观察者):定义用于添加、移除和通知观察者的方法;
  2. Observer(观察者):定义用于接收被观察者状态变化通知的方法;
  3. ConcreteSubject(具体被观察者):实现Subject接口,它具有可以被监测的属性和状态,并在状态发生变化时通知Observer;
  4. ConcreteObserver(具体观察者):实现Observer接口,它接收Subject状态变化通知并做出相应的响应。

实现观察者模式的步骤

  1. 定义Subject和Observer接口
interface Subject {
    public function attach(Observer $observer);
    public function detach(Observer $observer);
    public function notify();
}

interface Observer {
    public function update(Subject $subject);
}
  1. 实现ConcreteSubject类
class ConcreteSubject implements Subject {
    private $observers = [];
    private $state;

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

    public function detach(Observer $observer) {
        foreach ($this->observers as $key => $value) {
            if ($value == $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;
    }
}
  1. 实现ConcreteObserver类
class ConcreteObserver implements Observer {
    private $name;

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

    public function update(Subject $subject) {
        echo "{$this->name}观察到{$subject->getState()} 发生了变化<br>";
    }
}
  1. 示例说明
// 创建被观察者
$subject = new ConcreteSubject();

// 添加观察者
$observer1 = new ConcreteObserver('小明');
$observer2 = new ConcreteObserver('小红');

$subject->attach($observer1);
$subject->attach($observer2);

// 被观察者状态变化,并通知观察者
$subject->setState('测试状态1');

// 移除观察者
$subject->detach($observer2);

// 被观察者状态变化,并通知观察者
$subject->setState('测试状态2');

以上示例的输出结果为:

小明观察到测试状态1 发生了变化
小红观察到测试状态1 发生了变化
小明观察到测试状态2 发生了变化

根据输出结果可以看到,当被观察者的状态发生变化时,两个观察者对象都能够接收到通知并做出相应的响应。并且当一个观察者被移除时,不再接收到通知。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习php设计模式 php实现观察者模式(Observer) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 兼容PHP5的PHP目录管理函数库

    介绍PHP目录管理函数库的兼容性问题 PHP目录管理函数库通常用于文件的读写、复制、删除等操作。然而,该函数库在某些服务器上可能会因为PHP版本的问题而出现兼容性问题。为此,我们需要一套兼容PHP5的PHP目录管理函数库。 步骤一:确定PHP版本 在进行PHP目录管理函数库的使用前,首先要确定我们的服务器上安装的PHP版本是否是5或以上版本。若不满足,可以考…

    PHP 2023年5月23日
    00
  • PHP数组相关函数汇总

    PHP数组相关函数汇总文章的主要目的是介绍一些常用的PHP数组相关函数以及它们的用途。下面将分步骤详细讲解该文章的攻略: 一、介绍数组 在介绍PHP数组相关函数之前,我们需要先了解一下PHP数组。PHP数组是一种可以存储多个值的容器,可以存储各种数据类型,包括字符串、数字、其他数组等。 PHP数组的定义方式有两种:索引数组和关联数组。索引数组使用数字下标来表…

    PHP 2023年5月26日
    00
  • laravel的数据表填充器使用详解

    下面是”laravel的数据表填充器使用详解”的完整攻略。 1. 什么是数据表填充器? 数据表填充器(Database Seeder) 是 Laravel 框架中常用的一种功能,可以帮我们简化数据库的填充过程。使用数据表填充器,我们可以快速而又方便地为数据库创建初始数据,节省我们手动插入数据的时间。 2. 如何使用数据表填充器? 在 Laravel 框架中,…

    PHP 2023年5月26日
    00
  • php数组查找函数in_array()、array_search()、array_key_exists()使用实例

    PHP数组查找函数in_array()、array_search()、array_key_exists()使用实例攻略 在PHP中,经常需要对数组进行查找,PHP提供了三个常用的函数:in_array(), array_search(), array_key_exists()来对数组进行查找。本篇攻略将详细讲解这三个函数的使用实例,帮助大家更好地掌握PHP数…

    PHP 2023年5月26日
    00
  • 常用PHP框架功能对照表

    首先,我们需要明确什么是PHP框架,以及常用的PHP框架有哪些。PHP框架是一种基于PHP语言的开发框架,通过提供一定的框架、结构和规范,使得应用程序的开发更加简单、快捷、可维护,同时也提高了开发人员对于业务逻辑的抽象和设计能力。常用的PHP框架有Laravel、Symfony、Yii、CodeIgniter等。 “常用PHP框架功能对照表”是对比分析多个框…

    PHP 2023年5月23日
    00
  • PHP-FPM运行状态的实时查看及监控详解

    PHP-FPM运行状态的实时查看及监控详解 简介 PHP-FPM是一款PHP进程管理器,用于管理服务器上的PHP进程。它可以与nginx等web服务器协同工作,提高PHP进程的处理效率。在运维中,PHP-FPM的运行情况监控是非常有必要的。本文将介绍如何实时查看并监控PHP-FPM的运行状态。 工具 PHP-FPM php-fpm-status页面 curl…

    PHP 2023年5月24日
    00
  • php基础设计模式大全(注册树模式、工厂模式、单列模式)

    下面我来详细讲解PHP基础设计模式大全中的三种设计模式:注册树模式、工厂模式和单例模式。 注册树模式 注册树模式是一种解决全局共享和交换对象信息的方法,可以通过一个全局的静态类来管理所有对象的创建和使用。这种模式的核心在于使用一个全局的Registry类来维护所有对象的引用,以便全局共享和使用对象。 下面是一个使用注册树模式的代码示例: class Regi…

    PHP 2023年5月23日
    00
  • PHP正则表达式 /i, /is, /s, /isU等介绍

    下面是 “PHP正则表达式 /i, /is, /s, /isU等介绍” 的详细攻略: 什么是PHP正则表达式 PHP正则表达式是一种广泛用于文本匹配和查找的工具。它是一个特殊的字符串,可以用来描述一些特定的文本模式,以便进行匹配和查找。 正则表达式的语法 正则表达式的基本语法由字符和元字符组成。其中,字符表示字面值,元字符具有特殊含义。常用的元字符包括: .…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部