PHP观察者模式的代码实例<?php
// 观察者模式
/**
* abstract subject
*/
interface Subject
{
/**
* add Observer
*/
public function attach(Observer $obs);
/**
* remove Observer
*/
public function detach(Observer $obs);
/**
* notify Observer
*/
public function notify();
}
interface Observer
{
public function update(Subject $sub);
}
/**
* concrete subject
*/
class ConcreteSubject implements Subject
{
private $observerList = array();
public function attach(Observer $obs) {
$this->observerList[] = $obs;
}
public function detach(Observer $obs) {
$this->observerList = array_diff($this->observerList, [$obs]);
}
public function notify() {
foreach($this->observerList as $ol) {
$ol->update($this);
}
}
public function doAct() {
echo 'DoAct ...
';
$this->notify();
}
}
/**
* concrete observer 1
*/
class Observer1 implements Observer
{
public function update(Subject $sub) {
echo 'Observer one updated!
';
}
}
/**
* concrete observer 2
*/
class Observer2 implements Observer
{
public function update(Subject $sub) {
echo 'Observer two updated!
';
}
}
// test code
$sub = new ConcreteSubject();
$sub->attach(new Observer1()); //add observer
$sub->attach(new Observer1());
$sub->attach(new Observer2());
$sub->doAct();