【PHP设计模式 06_GuanChaZhe.php】观察者模式
<?php /** * 【观察者模式】 * PHP5中提供了 观察者(observer) 和 被观察者(subject) 的接口 * 在手册搜索:SplSubject (PHP 5 >= 5.1.0) * * SplSubject { * abstract public void attach ( SplObserver $observer ) * abstract public void detach ( SplObserver $observer ) * abstract public void notify ( void ) * } * */ header("Content-type: text/html; charset=utf-8"); /*根据登录次数和爱好,进行观察.定义user类,实现SplSubject接口 */ class User implements SplSubject{ public $lognum; //登录次数 public $hobby; //爱好 protected $observers; //用来储存对象 public function __construct($hobby){ $this->lognum = rand(1,10); //登录次数:随机数 $this->hobby = $hobby; //爱好:参数传递 $this->observers = new SplObjectStorage(); } //登录操作 public function login(){ //操作session... 代码忽略 //登录后,触发notify $this->notify(); } //观察 public function attach(SPLObserver $observer){ $this->observers->attach($observer); } //取消观察 public function detach(SPLObserver $observer){ $this->observers->detach($observer); } //通知 public function notify(){ $this->observers->rewind(); //不断循环获取储存的对象 while($this->observers->valid()){ $observer = $this->observers->current(); $observer->update($this); $this->observers->next(); } } } /*假如现在有个“安全模块” security 要来观察 */ class security implements SPLObserver{ public function update(SplSubject $subject){ if($subject->lognum < 3){ echo '这是第'.$subject->lognum.'次安全登录<br>'; }else{ echo '这是第'.$subject->lognum.'次登录,出现异常。<br>'; } } } /*再假如现在有个“广告模块” ad 要来观察 */ class ad implements SPLObserver{ public function update(SplSubject $subject){ if($subject->hobby == 'sports'){ echo '开运动会<br>'; }else{ echo '哈哈哈哈哈哈<br>'; } } } /*实施观察*/ //实例化User $user = new User('sports'); //实施“安全模块”的观察 $user->attach(new security()); //实施“广告模块”的观察 $user->attach(new ad()); //执行登录操作 $user->login();
【PHP设计模式 06_GuanChaZhe.php】观察者模式的更多相关文章
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- Java设计模式之《观察者模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6513651.html 观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监 ...
- Java设计模式百例 - 观察者模式
观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe ...
- [head first 设计模式]第二章 观察者模式
[head first 设计模式]第二章 观察者模式 假如我们有一个开发需求--建造一个气象观测站展示系统.需求方给我们提供了一个WeatherObject对象,能够自动获得最新的测量数据.而我们要建 ...
- Java设计模式10:观察者模式
观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他 ...
- 大话设计模式C++版——观察者模式
观察者模式是一种类似于消息分发的模式,用于一个任务需要被多个对象监听的场景,或者成员对象需要反向通知类对象的情况,是一种很有用的设计模式. 这里以大话设计模式中的例子为例,办公室员工A.B.C在 ...
- 【C++深入浅出】设计模式学习之观察者模式
前言 前两天学习了weak_ptr以后还是不甚明了,一则需要实际应用去锤炼,二来就是不懂观察者模式. 正文 观察者模式又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对 ...
- php设计模式之:观察者模式
转载自php面向对象设计模式 之 观察者模式 问题 假如一个小贩, 他把产品的价格提升了, 不同的消费者会对此产生不同的反应.一般的编程模式无非是获取提升的价格,然后获取所有的消费者,再循环每个消费者 ...
- 我理解设计模式C++实现观察者模式Observer Pattern
概述: 近期中国股市起起伏伏,当然了起伏就用商机,小明发现商机后果断想入市,买入了中国证券,他想在电脑client上,网页上,手机上,iPad上都能够查看到该证券的实时行情,这样的情况下我们应该怎么设 ...
随机推荐
- Xib的使用与File'Owner总结
Xib的使用与File'Owner总结 一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描述界面的. storyboard描述的是比较大型的,大范围.适合描述界面跳转等. 二 ...
- python 模块zlib 压缩与解压
例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zli ...
- python eval
缘起 小例子 def test_1(val): print "val", val, type(val) def test_2(val): print ) if __name__ = ...
- session的方法
Hibernate对象的状态 瞬时(Transient) — 由 new 操作符创建,且尚未与Hibernate Session 关联的对象被认定为瞬时(Transient)的.瞬时(Transien ...
- MySQL的半同步复制监控
(1)master端 >show variables like 'rpl_semi_sync%'; +------------------------------------+-------+ ...
- asp.net mvc 后台怎么接受前端返回的array list dictionary
参考了别人的文章,我这样尝试去写: 数据源:memberInRoles var memberInRoles= {}; for(var i=0;i<sureOptions.length;i++){ ...
- Wcf Restful Service服务搭建
目的 使用Wcf(C#)搭建一个Restful Service 背景 最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restf ...
- 学习OpenCV——OpenMP
转自:http://www.cnblogs.com/yangyangcv/archive/2012/03/23/2413335.html openMP的一点使用经验 最近在看多核编程.简单来说,由 ...
- PostgreSQL数据库postgresql.conf部分相关参数
listen_addresses:#指定数据库用来监听客户端连接的TCP/IP地址,默认是值是* ,表示数据库在启动以后将在运行数据的机器上的所有的IP地址上监听用户请求,可以写成机器的名字,也可以写 ...
- WEB简单数据操作练习
主要学习代码: Login.aspx: <!--第一种方式--> <%-- <script type="text/javascript"> funct ...