【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上都能够查看到该证券的实时行情,这样的情况下我们应该怎么设 ...
随机推荐
- 发现EF中字段错误
在使用EF时,报错: 对一个或多个实体的验证失败.有关详细信息,请参见“EntityValidationErrors”属性 添加一个验证方法: 代码: using System; using Syst ...
- RANSAC随机一致性采样算法学习体会
The RANSAC algorithm is a learning technique to estimate parameters of a model by random sampling of ...
- SocketServer model_use
#!/usr/bin/env python #-*- coding:utf- -*- import SocketServer class MySocker(SocketServer.BaseReque ...
- 关于IOS框架的解释
- update kernel
1,version 2,command First, verify the current kernel version: $ uname -r 2.6.32-358.el6.x86_64 Befor ...
- composer很慢修改镜像
有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中.见“例1” 单个项目配置: 将配置信息添加到某个项目的 composer. ...
- tableview的cell点击和取消
#pragma mark - 选择cell: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPa ...
- ORACLE 12C PDB 维护基础介绍
来自:http://www.xifenfei.com/2013/05/oracle-12c-pdb-%E7%AE%A1%E7%90%86%E4%BB%8B%E7%BB%8D1.html CDB和PDB ...
- 利用最新版的RubyMine2016.2开发Ruby On Rails 程序
经过我的前两篇博文 ”Ruby On Rails环境搭建“ 和”Ruby On Rails 环境搭建MySQL数据库连接“ 我们已经具备了开发Ruby On Rails程序的一切要素,但是天天对着do ...
- Java获取当前内存及硬盘使用情况
import java.io.File; import java.lang.management.ManagementFactory; import com.sun.management.Operat ...