php观察者模式。
第一次写博客,大家多多关照!欢迎拍砖哦!
我也刚学设计模式,所以记录下来。
<?php class person{
public $name;
public $birthday; public function __set($name,$value){
if(isset($this->$name))
$this->$name=$value;
}
public function __get($name){
if(isset($this->$name))
return $this->$name;
}
} //观察者类实现SplSubject接口,SplSubject是php内置接口
class PersonSubject implements SplSubject{
public $observers,$person; public function __construct(person $person){
$this->observers = new SplObjectStorage();
$this->person=$person;
} //增加一个观察者
public function attach(SplObserver $observers){
$this->observers->attach($observers);
}
//删除一个观察者
public function detach(SplObserver $observers){
$this->observers->detach($observers);
}
//达到条件时,通知观察者
public function notify(){
foreach($this->observers as $observer){
$observer->update($this);
}
}
//返回被观察者实例,供观察者处理
public function getPerson(){
return $this->person;
}
} //观察者实现SplObserver接口,SplObserver是php内置接口
class fatherObserver implements SplObserver{
//条件达到时,执行的动作
public function update(SplSubject $splsubject){
$person=$splsubject->getPerson();
echo $person->name.' 生日快乐,我是爸爸!';
}
} class motherObserver implements SplObserver{
public function update(SplSubject $splsubject){
$person=$splsubject->getPerson();
echo $person->name.' 生日快乐,我是妈妈!';
}
} class sisterObserver implements SplObserver{
public function update(SplSubject $splsubject){
$person=$splsubject->getPerson();
echo $person->name.' 生日快乐,我是姐姐!';
}
} //实例化小明
$xiaoming=new person();
$xiaoming->name='小明';
$xiaoming->birthday='0512'; //绑定观察者
$subject=new PersonSubject($xiaoming);
$subject->attach(new fatherObserver);
$subject->attach(new motherObserver);
$subject->attach(new sisterObserver); //如果小明生日到了,通知观察者
$date=date('md',time());
if($xiaoming->birthday==$date){
$subject->notify();
} ?>
输出
大家自己看吧,项目中我也没用到观察者模式,郁闷!
php观察者模式。的更多相关文章
- 23种设计模式--观察者模式-Observer Pattern
一.观察者模式的介绍 观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...
- 谈谈JS的观察者模式(自定义事件)
呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...
- ObserverPattern(观察者模式)
import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...
- java观察者模式
像activeMQ等消息队列中,我们经常会使用发布订阅模式,但是你有没有想过,客户端时如何及时得到订阅的主题的信息?其实就里就用到了观察者模式.在软件系统中,当一个对象的行为依赖于另一个对象的状态 ...
- Backbone源码解析(六):观察者模式应用
卤煮在大概一年前写过backbone的源码分析,里面讲的是对一些backbone框架的方法的讲解.这几天重新看了几遍backbone的源码,才发现之前对于它的理解不够深入,只关注了它的一些部分的细节和 ...
- PHP 高级编程(3/5) - 使用SPL(标准PHP库)实现观察者模式
SPL(标准PHP库 - Standard PHP Library)是PHP5面向对象功能中重要的部分.原文解释是这样的“The Standard PHP Library (SPL) is a col ...
- 设计模式--观察者模式初探和java Observable模式
初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...
- 学C#之设计模式系列笔记(2)观察者模式
一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,观察者模式,https://zh.wikipedia.o ...
- PHP 观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. [观察者模式中主要角色] 1.抽象主题(Subject)角色: 抽象主题提供了增加 ...
- GJM: 设计模式 - 观察者模式
GJM : 观察者模式 视频地址: http://www.imooc.com/learn/415 本课程通过一个天气预报的发布和订阅案例,来讲解观察者模式在Java项目中的应用.主要包括观察者模式的结 ...
随机推荐
- NIKKEI Programming Contest 2019-2 D 部分分题解
请注意本文章所描写的算法只可以获得前 14 个测试点(含三个样例)的部分分,但是没有出现 WA 的情况. 题面 给出 \(m\) 个线段,每次可以从线段上任意一点以代价 \(c_i\) 走到线段上另一 ...
- QQ企业通知识点---ClassSerializers
Serializers 串列器 序列化器 串行器 MemoryStream 创建其支持存储区为内存的流. BinaryFormatter 以二进制格式将对象或整个连接对象图形序列化和反序列化 ...
- Core data 如何查看ObjectId
ObjectId是Core Data 为每一个数据对象提供的唯一ID标识,获取ObjectID.并打印的方法如下: 步骤: 1. 获取ManagedObject 2. ManagedObject -& ...
- Unity内置shader 下载
Unity内置shader 4.3.1 版本的 其他版本可以自己修改名称 下载地址 http://download.unity3d.com/download_unity/builtin_shade ...
- C# 篇基础知识7——字符串
文字是信息的主要表达方式,因此文字处理是计算机的一项重要功能之一.现在来深入研究C#中字符串的各种特性.正则表达式的基本概念以及如何用正则表达式进行文本匹配. 1.char结构 C#中的字符用Syst ...
- 题解 P2801 【教主的魔法】
分块入门题,不错的,建议大家做一做 开始学习 先看一下数列分块入门 2 这道题想让我们求区间[l,r]>=c的个数,然后我们可以看到"数列分块入门 2"是求区间[l,r]&l ...
- less在vscode中的配置方式
1.在vscode插件中下载easy less这个插件. 2.新建项目,分别建两个文件夹存放less和自动编译好的css,页面中引入文件引css就可以了. 3.根据你的文件位置,在用户设置中设置需要配 ...
- 记一次菜鸡的低级折腾--WordPress get Webshell(后台文件编辑插马)
挺简单的一个测试站,开始思路错了,一直去网上找WordPress的漏洞,看有没有什么能利用的,未果,因为这个测试站有些地方并不完善,有的漏洞利用不了,菜鸡的我连弱口令都没猜对,没知识就是这么悲哀. 下 ...
- 扩展新函数给window
page.exposeFunction(name, puppeteerFunction) name <string> Name of the function on the window ...
- 题解 nflsoj550 【六校联合训练 省选 #9】序列
题目链接 以下把值域(题面里的\(lim\))记做\(m\). 考虑求\(k\)的答案.考虑每个位置对答案的贡献,枚举位置\(i\),再枚举\(a[i]\)的值\(x\).设: \[ F(k)=\su ...