设计模式之观察者模式

发布于 / 1年前 - 更新于 / 1年前


设计模式之观察者模式

对象间存在一对多的依赖关系时,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

实例代码,如下

<?php // 被观察者 class Subject{ private $list = []; // 添加观察者 public function addNotify($notify){ $this->list[] = $notify; } // 被观察者 被改变 public function setData($num){ $this->notifyAll($num); } // 通知所有观察者 private function notifyAll($num){ foreach ($this->list as $k => $v) { $v->update($num); } } } // 观察者接口 abstract class BaseUser{ public $num; abstract function update($num); } // 观察者1 class One extends BaseUser{ function __construct(){ $this->num = 1; } public function update($num){ echo "<br/>one:".$this->num * $num; } } // 观察者2 class Two extends BaseUser{ function __construct(){ $this->num = 2; } public function update($num){ echo "<br/>two:".$this->num * $num; } } // 观察者3 class Three extends BaseUser{ function __construct(){ $this->num = 3; } public function update($num){ echo "<br/>three:".$this->num * $num; } } // 使用 // 获取观察者 $one = new One(); $two = new Two(); $three = new Three(); // 获取被观察者 $subject = new Subject(); // 添加观察者,实际应用直接查询出依赖的观察者即可 $subject->addNotify($one); $subject->addNotify($two); $subject->addNotify($three); // 被观察者改变 $subject->setData(100);

本作品采用《CC 协议》,转载必须注明作者和本文链接