观察者模式(Observer),简单理解就是当你的程序在运行时,会有另一套程序在观察。

介绍

1、观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。

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

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

定义一个事件触发抽象类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
}
}
}

定义一个观察者接口

1
2
3
4
5
6
7
Observer.php
<?php
require_once 'Loader.php';
interface Observer{
function update();//这里就是在事件发生后要执行的逻辑
}
//一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();