PHP设计模式之观察者模式浅析(观察者模式应用实例)没想到

随心笔谈2年前发布 编辑
174 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

<?php
// 主题接口
interface Subject {
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}
// 观察者接口
interface Observer {
public function update(Subject $subject);
}
// 具体主题类
class ConcreteSubject implements Subject {
private $observers=[];
private $state;
public function attach(Observer $observer) {
$this->observers[]=$observer;
}
public function detach(Observer $observer) {
$index=array_search($observer, $this->observers);
if ($index !==false) {
unset($this->observers[$index]);
}
}
public function notify() {
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
public function getState() {
return $this->state;
}
public function setState($state) {
$this->state=$state;
$this->notify();
}
}
// 具体观察者类
class ConcreteObserver implements Observer {
private $state;
public function update(Subject $subject) {
$this->state=$subject->getState();
}
public function getState() {
return $this->state;
}
}
// 使用观察者模式
$subject=new ConcreteSubject();
$observer1=new ConcreteObserver();
$observer2=new ConcreteObserver();
$subject->attach($observer1);
$subject->attach($observer2);
$subject->setState(“State 1”);
echo $observer1->getState(); // 输出:State 1
echo $observer2->getState(); // 输出:State 1
$subject->setState(“State 2”);
echo $observer1->getState(); // 输出:State 2
echo $observer2->getState(); // 输出:State 2
$subject->detach($observer2);
$subject->setState(“State 3”);
echo $observer1->getState(); // 输出:State 3
echo $observer2->getState(); // 输出:State 2

© 版权声明

相关文章