<?php
//观察这模式
interface Isubject{
function AddObserver(Observer $obj);
function RemoveObserver(Observer $obj);
function notifyObservers();
}
interface Observer{
function update(Isubject $s);
}
class Subject implements Isubject{
private $arr = array();
private $id = 1;
private $title = '标题';
private $content = '网站内容HI';
function AddObserver(Observer $obj) {
array_push($this->arr, $obj);
}
function RemoveObserver(Observer $obj){
$keys = array_search($obj, $this->arr);
unset($this->arr[$keys]);
}
function notifyOvservers(){
foreach($this->arr as $val){
$val->update($this);
}
}
function __set($name, $val) {
$this->$name = $val;
$this->notifyObservers();
}
function __get($name) {
return $this->$name;
}
}
class ObserverA implements Observer{
function update(Isubject $s){
echo "<h1> $s->title </h1><hr>";
}
}
class ObserverB implements Observer{
function update(Isubject $s){
echo "<h1> $s->title </h1><p>$s->content</p><hr>";
}
}
$a = new ObserverA();
$b = new ObserverB();
$s = new Subject();
$s->AddObserver($a);
$s->AddObserver($b);
//出现数据变动后,触发通知
$s->title = '我们的大中国';
观察者模式:给某一个事件(主题)添加观察者,当触发这个事件的某个方法时,或许改变了这个事件的某些属性啥的,并且改变之后还需要通知观察这个事件的人(观察者)。
这篇博文解释的还不错:https://blog.csdn.net/zhang_referee/article/details/82729540