第一次写博客,大家多多关照!欢迎拍砖哦!

  我也刚学设计模式,所以记录下来。

  

<?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();
} ?>

输出    

大家自己看吧,项目中我也没用到观察者模式,郁闷!

最新文章

  1. 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例
  2. 旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组
  3. BST、B树、B+树、B*树
  4. java阻塞队列
  5. [CareerCup] 5.2 Binary Representation of Real Number 实数的二进制表示
  6. JSONKit 简单使用
  7. 【sinatra】安装测试
  8. 我们无法找到服务器加载工作簿的数据模型&quot;的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错
  9. javascript util.js
  10. CodeForces Round #285 Div.2
  11. Sql三种分页方法
  12. 简谈ArrayList和LinkedList区别
  13. MVVM in Depth
  14. Javascript异步数据的同步处理方法
  15. JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习
  16. hive数据库的哪些函数操作是否走MR
  17. h5 打开 app
  18. MySQL数据库详解之&quot;双1设置&quot;的数据安全的关键参数案例分享
  19. CocoaPods更新过程中出现的坑及解决方法
  20. idea android 开发

热门文章

  1. python3的urllib以及urllib2的报错问题
  2. 更换JAVA程序的界面风格
  3. 一 SpringMvc概述&amp;入门配置
  4. 基于zedboard的DMA设计笔记
  5. MySQL 通过SQL语句导出表为文件
  6. windows制作动态链接库和使用二
  7. Emergency
  8. linux(centos6.9)下使用yum安装mysql,及启动MySQL等
  9. 微信小程序—页面跳转
  10. 微信小程序—显示当前时间