介绍意图:定义对象之间一对多的依赖关系。当一个对象的状态发生变化时,所有依赖它的对象都会收到通知并自动更新。主要解决:一个对象状态改变通知其他对象的问题,兼顾易用性和低耦合性,保证高度协作。何时使用:当一个对象(目标对象)的状态发生变化时,所有的依赖对象(观察者对象)都会收到通知并广播通知。使用场景:1.拍卖行,所有买家必须知道当前的比赛信息2.报纸,新一期的报纸要分发给所有订阅者观察员;私人$内容;公共函数__construct(){$this->observers=newSplObjectStorage();}publicfunctionattach(SplObserver$observer){$this->observers->attach($observer);}publicfunctiondetach(SplObserver$observer){$this->observers->detach($observer);}publicfunctionnotify(){foreach($this->observersas$observer){$observer->update($this);}}publicfunctiongetContent(){return$this->content;}publicfunctionbreakOutNews($content){$this->content=$content;$this->通知();}}//观察者类Reader实现SplObserver{private$name;公共函数__construct($name){$this->name=$name;}公共函数更新(SplSubject$subject){echo$this->name.'receive'.$subject->getContent().PHP_EOL;}}$newspaper=newNewspaper('times');$a=newReader("a");$b=newReader($newspaper->attach($a);$newspaper->attach($b);$newspaper->attach($c);//移除观察者$newspaper->detach($a);//发布$newspaper->breakOutNews('news23333');
