찾다
php教程php手册php设计模式 观察者模式,设计模式观察者

php设计模式 观察者模式,设计模式观察者

观察者模式的核心是把客户元素(观察者)从一个中心类(主体)中分离开来。当主体知道事件发生时,观察者需要被通知到。同时,我们并不希望将主体与观察者之间的关系进行硬编码。为了达到这个目的,我们可以允许观察者在主体上进行注册。

观察者模式实现了低耦合、非侵入式的通知与更新机制。

场景:当一个事件发生后,要执行一连串更新操作。

<span>EventGenerator</span>.php
<?<span>php
namespace Baobab;
</span><span>/*</span><span>*
 * Class EventGenerator 基类,事件发生者
 </span><span>*/</span>
<span>abstract</span> <span>class</span><span> EventGenerator{

    </span><span>//</span><span>观察者对于事件发生者是不可见的,事件发生者不关心有哪些观察者关注了事件</span>
    <span>private</span> <span>$observers</span> = <span>array</span><span>();

    </span><span>/*</span><span>*
     * 添加观察者
     </span><span>*/</span>
    <span>function</span> addObserver(Observer <span>$observer</span><span>){
        </span><span>$this</span>->observers[] = <span>$observer</span><span>;
    }

    </span><span>/*</span><span>*
     *逐个通知观察者进行更新的操作
     </span><span>*/</span>
    <span>function</span><span> notify(){
        </span><span>foreach</span>(<span>$this</span>->observers <span>as</span> <span>$observer</span><span>){
            </span><span>$observer</span>-><span>update();
        }
    }
}</span>
<span>Observer</span>.php
<?<span>php
namespace Baobab;
</span><span>/*</span><span>*
 * Class Observer 观察者,观察的对象是事件发生者
 * @package Baobab
 </span><span>*/</span>
<span>interface</span><span> Observer{
    </span><span>/*</span><span>*
     * @param null $event_info  事件的信息
     * 表示事件发生后进行更新的操作
     </span><span>*/</span>
    <span>function</span> update(<span>$event_info</span> = <span>null</span><span>);
}</span>

index.php

<span>class</span> Event <span>extends</span><span> \Baobab\EventGenerator{
    </span><span>/*</span><span>*
     *触发一个新的事件
     </span><span>*/</span>
    <span>function</span><span> trigger(){
        </span><span>echo</span> 'Event发生'<span>;
        </span><span>$this</span>-><span>notify();
    }
}

</span><span>/*</span><span>*
 * 观察者1
 </span><span>*/</span>
<span>class</span> Observer1 <span>implements</span><span> \Baobab\Observer{
    </span><span>function</span> Update(<span>$event_info</span> = <span>null</span><span>){
        </span><span>echo</span> '更新操作代码1'<span>;
    }
}<br />
<span>/*<span>* <br /> * 观察者2 <br /><span> */</span></span></span>
</span><span>class</span> Observer2 <span>implements</span><span> \Baobab\Observer{
    </span><span>function</span> Update(<span>$event_info</span> = <span>null</span><span>){
        </span><span>echo</span> '更新操作代码2'<span>;
    }
}

</span><span>$event</span> = <span>new</span><span> Event();
</span><span>$event</span>->addObserver(<span>new</span><span> Observer1());
</span><span>$event</span>->addObserver(<span>new</span><span> Observer2());
</span><span>$event</span>->trigger();

 

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
如何在PHP后端功能开发中合理应用设计模式?如何在PHP后端功能开发中合理应用设计模式?Aug 07, 2023 am 10:34 AM

如何在PHP后端功能开发中合理应用设计模式?设计模式是一种经过实践证明的解决特定问题的方案模板,可以用于构建可复用的代码,在开发过程中提高可维护性和可扩展性。在PHP后端功能开发中,合理应用设计模式可以帮助我们更好地组织和管理代码,提高代码质量和开发效率。本文将介绍常用的设计模式,并给出相应的PHP代码示例。单例模式(Singleton)单例模式适用于需要保

如何通过编写代码来学习和运用 PHP8 的设计模式如何通过编写代码来学习和运用 PHP8 的设计模式Sep 12, 2023 pm 02:42 PM

如何通过编写代码来学习和运用PHP8的设计模式设计模式是软件开发中常用的解决问题的方法论,它可以提高代码的可扩展性、可维护性和重用性。而PHP8作为最新版的PHP语言,也引入了许多新特性和改进,提供更多的工具和功能来支持设计模式的实现。本文将介绍一些常见的设计模式,并通过编写代码来演示在PHP8中如何运用这些设计模式。让我们开始吧!一、单例模式(Sing

深入聊聊设计模式利器之“职责链模式”(附go实现流程)深入聊聊设计模式利器之“职责链模式”(附go实现流程)Jan 17, 2023 am 11:43 AM

本篇文章给大家带来了关于golang设计模式的相关知识,其中主要介绍了职责链模式是什么及其作用价值,还有职责链Go代码的具体实现方法,下面一起来看一下,希望对需要的朋友有所帮助。

Go语言中的ETL的设计模式Go语言中的ETL的设计模式Jun 01, 2023 pm 09:01 PM

随着数据的增长和复杂性的不断提升,ETL(Extract、Transform、Load)已成为数据处理中的重要环节。而Go语言作为一门高效、轻量的编程语言,越来越受到人们的热捧。本文将介绍Go语言中常用的ETL设计模式,以帮助读者更好地进行数据处理。一、Extractor设计模式Extractor是指从源数据中提取数据的组件,常见的有文件读取、数据库读取、A

深入解析Go语言中的单例模式深入解析Go语言中的单例模式Mar 21, 2023 pm 06:36 PM

单例模式是一种常见的设计模式,它在系统中仅允许创建一个实例来控制对某些资源的访问。在 Go 语言中,实现单例模式有多种方式,本篇文章将带你深入掌握 Go 语言中的单例模式实现。

设计模式的六大原则是什么设计模式的六大原则是什么Jan 06, 2023 pm 04:25 PM

设计模式的六大原则:1、单一职责原则,其核心就是控制类的粒度大小、将对象解耦、提高其内聚性;2、开闭原则,可以通过“抽象约束、封装变化”来实现;3、里氏替换原则,主要阐述了有关继承的一些原则;4、依赖倒置原则,降低了客户与实现模块之间的耦合;5、接口隔离原则,是为了约束接口、降低类对接口的依赖性;6、迪米特法则,要求限制软件实体之间通信的宽度和深度。

了解JavaScript中的设计模式和最佳实践了解JavaScript中的设计模式和最佳实践Nov 03, 2023 am 08:58 AM

随着JavaScript的不断发展和应用范围的扩大,越来越多的开发人员开始意识到设计模式和最佳实践的重要性。设计模式是一种被证明在某些情况下有用的软件设计解决方案。而最佳实践则是指在编程过程中,我们可以应用的一些最佳的规范和方法。在本文中,我们将探讨JavaScript中的设计模式和最佳实践,并提供一些具体的代码示例。让我们开始吧!一、JavaScript中

C#开发建议:设计模式与架构选择C#开发建议:设计模式与架构选择Nov 22, 2023 pm 03:53 PM

在C#开发中,设计模式和架构选择是至关重要的。良好的设计模式和合适的架构选择可以大大提高软件的可维护性、扩展性和性能。本文将讨论一些在C#开发中常用的设计模式和架构选择,并给出一些建议。设计模式是解决特定问题的通用解决方案,它们可以帮助开发人员避免重复造轮子,提高代码的可重用性和可读性。在C#开发中,有许多常用的设计模式,如单例模式、工厂模式、观察者模式等。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는