PHP设计模式系列(九):观察者模式
来源:互联网 发布:南京安全教育网络平台 编辑:程序博客网 时间:2024/06/06 02:01
观察者模式
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
观察者模式是一种对象行为型模式。
模式结构
观察者模式包含如下角色:
- Subject: 目标
- ConcreteSubject: 具体目标
- Observer: 观察者
- ConcreteObserver: 具体观察者
结构图
PHP代码实现
<?php/** * 观察者模式 *///Subject: 目标abstract class Subject{ private $observers=[]; public function Attach($observer){ $this->observers[]=$observer; } public function Detach($observer){ foreach ($this->observers as $value){ if($value != $observer) $this->observers[] = $value; } } public function Notify(){ foreach ($this->observers as $observer){ $observer->Update(); } }}//Observer: 观察者abstract class Observer{ public abstract function Update();}//ConcreteSubject: 具体目标class ConcreteSubject extends Subject{ public function __set($name, $value) { $this->$name=$value; } public function __get($name) { return $this->$name; }}//ConcreteObserver: 具体观察者class ConcreteObserver extends Observer{ public function __construct($subject,$name){ $this->subject=$subject; $this->name=$name; } public function __set($name, $value) { $this->$name=$value; } public function __get($name) { return $this->$name; } public function Update() { $this->observerState=$this->subject->SubjectState; var_dump('观察者'.$this->name.'的新状态是'.$this->observerState); }}$a=new ConcreteSubject();$a->Attach(new ConcreteObserver($a,'X'));$a->Attach(new ConcreteObserver($a,'Y'));$a->Attach(new ConcreteObserver($a,'Z'));$a->SubjectState='ABC';$a->Notify();
运行结果
string '观察者X的新状态是ABC' (length=28)string '观察者Y的新状态是ABC' (length=28)string '观察者Z的新状态是ABC' (length=28)
0 0
- PHP设计模式系列(九):观察者模式
- PHP设计模式系列 - 观察者模式
- PHP设计模式系列 - 观察者模式
- php设计模式学习系列(九)--桥接模式
- 设计模式-观察者模式(PHP实现)
- PHP模式设计----观察者模式(Observer)
- php 设计模式(观察者模式)
- 设计模式系列:观察者模式
- 【设计模式系列】--观察者模式
- php 观察者设计模式
- PHP设计模式:观察者模式
- php设计模式-观察者模式
- [php] 设计模式 观察者模式
- PHP设计模式-观察者模式
- PHP设计模式-观察者模式(订阅者模式)
- PHP设计模式-观察者模式(订阅者模式)
- PHP设计模式-观察者模式(订阅者模式)
- 设计模式系列:观察者模式(Observer Pattern)
- 浅析爬虫nutch2.0(一)
- toj-1196-网站的浏览记录
- Python RE 模块简介
- AtCoder Regular Contest 073 D
- SQLServer的最大连接数
- PHP设计模式系列(九):观察者模式
- JavaScript基础(1)之数据类型
- spring源码(9)自定义标签与自定义标签的解析
- 把字符串转换成整数
- 家用路由器 实现 Web认证
- Ubuntu16.04安装NVIDIA显卡驱动和CUDA时的一些坑与解决方案
- 新唐N32926移植QT4
- Java村旅游圣地(四)---浅谈五大设计原则
- Longest Common Prefix