php程序设计模式之观察者模式

206
发布时间:2024-07-22 09:37:38

观察者模式(Observer Pattern)是PHP中常用的设计模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。观察者模式实现了低耦合,非侵入式的通知与更新机制。这种模式在事件处理系统、数据模型和视图的绑定等方面非常有用。

观察者模式应用场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。

在PHP中实现观察者模式通常涉及到以下角色:

  1. Subject(主题或被观察者):持有观察者列表,并提供添加和删除观察者的接口。当状态发生变化时,通知所有观察者。
  2. Observer(观察者):订阅主题的变化,实现一个更新的方法,以便在收到主题的通知时进行相应的操作。

下面是一个简单的PHP观察者模式的实现示例:
定义一个事件触发抽象类。

EventGenerator.php
<?php
require_once 'Loader.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
require_once 'Loader.php';
interface Observer{
    function update();//这里就是在事件发生后要执行的逻辑
}
<?php
//一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件
require 'Loader.php';
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();

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

本文被 PHP编程 专题收录