本文共 2037 字,大约阅读时间需要 6 分钟。
观察者模式(Observer Pattern)是一种设计模式,旨在实现低耦合、非侵入式的通知与更新机制。它的核心思想是:当一个对象的状态发生改变时,其依赖的对象会自动收到通知,并执行相应的更新操作。
传统的事件处理方式通常是直接在事件代码之后添加更新逻辑。当更新逻辑变得复杂时,代码难以维护。此种耦合方式不仅增加了代码的复杂性,还使得添加新的逻辑处理变得困难。观察者模式通过引入通知机制,解决了这一问题。
观察者模式包含以下角色:
abstract class Subject { protected $observers = array(); abstract public function addObserver(Observer $observer); abstract public function delObserver(Observer $observer); abstract public function notify(); abstract public function condition($num);} interface Observer { function update();} class ConcreteSubject extends Subject { public function addObserver(Observer $observer) { $this->observers[] = $observer; } public function delObserver(Observer $observer) { $key = array_search($observer, $this->observers); if ($key !== false) { unset($this->observers[$key]); } } public function notify() { foreach ($this->observers as $key => $value) { $value->update(); } } public function condition($num) { if ($num > 100) { $this->notify(); } }} class ConcreteObserverA implements Observer { public function update() { echo "A报告: 敌军超过一百人了,快撤!"; } public function eat() { echo "A在吃饭"; }}class ConcreteObserverB implements Observer { public function update() { echo "B报告: 敌军超过一百人了,快撤!"; } public function sleep() { echo "B在睡觉"; }} // 测试代码$a = new ConcreteObserverA();$b = new ConcreteObserverB();$subject = new ConcreteSubject();$subject->addObserver($a);$subject->addObserver($b);$subject->condition(1000);
通过以上代码实现,可以清晰地看到观察者模式的工作原理。具体目标(ConcreteSubject)通过通知方法(notify())将所有观察者的更新操作(update())触发。当目标的状态满足特定条件(condition())时,会自动通知所有关注其的观察者。这一机制使得代码结构更加清晰,实现了低耦合、非侵入式的更新管理。
转载地址:http://dltfk.baihongyu.com/