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

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

  

<?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观察者模式。的更多相关文章

  1. 23种设计模式--观察者模式-Observer Pattern

    一.观察者模式的介绍      观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...

  2. 谈谈JS的观察者模式(自定义事件)

    呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...

  3. ObserverPattern(观察者模式)

    import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...

  4. java观察者模式

      像activeMQ等消息队列中,我们经常会使用发布订阅模式,但是你有没有想过,客户端时如何及时得到订阅的主题的信息?其实就里就用到了观察者模式.在软件系统中,当一个对象的行为依赖于另一个对象的状态 ...

  5. Backbone源码解析(六):观察者模式应用

    卤煮在大概一年前写过backbone的源码分析,里面讲的是对一些backbone框架的方法的讲解.这几天重新看了几遍backbone的源码,才发现之前对于它的理解不够深入,只关注了它的一些部分的细节和 ...

  6. PHP 高级编程(3/5) - 使用SPL(标准PHP库)实现观察者模式

    SPL(标准PHP库 - Standard PHP Library)是PHP5面向对象功能中重要的部分.原文解释是这样的“The Standard PHP Library (SPL) is a col ...

  7. 设计模式--观察者模式初探和java Observable模式

    初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...

  8. 学C#之设计模式系列笔记(2)观察者模式

    一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,观察者模式,https://zh.wikipedia.o ...

  9. PHP 观察者模式

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. [观察者模式中主要角色] 1.抽象主题(Subject)角色: 抽象主题提供了增加 ...

  10. GJM: 设计模式 - 观察者模式

    GJM : 观察者模式 视频地址: http://www.imooc.com/learn/415 本课程通过一个天气预报的发布和订阅案例,来讲解观察者模式在Java项目中的应用.主要包括观察者模式的结 ...

随机推荐

  1. etc/passwd 和 /etc/shadow 文件内容及其解释

    /etc/passwd 和 /etc/shadow 文件内容及其解释 默认情况下,/etc/passwd 存储有关本地用户的信息 /etc/passwd 采用以下格式: 1)username      ...

  2. SpringMVC架构&组件&执行流程

    SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...

  3. python爬虫入门之快递查询

    现在快递遍布生活的角角落落,一个快递其实是信息的集合体,里面包含大量的物流信息,那能不能自己实现一个快递查询的小功能?答案是能的!现在也有别人整理好的快递查询api,比如说快递100,可以通过它提供的 ...

  4. 第2节 storm路由器项目开发:8 - 9、集群监控软件ganglia的安装和使用

    Ganglia监控Hadoop集群的安装部署 详情请参见 http://boendev.iteye.com/blog/1750615 一. 安装环境 CentOS6.5x86_64 安装gmetad的 ...

  5. Oracle查看正在执行的存储过程

    正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...

  6. Redis 一些基本的概念和基础

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  7. java关于hasNext()

    编写一段程序实现如果输入的一组数中含非整数数字,输出数字相加的和以及"attention"字符,如果全部是数字便输出数字的和. 程序1: package mian; import ...

  8. 前端学习笔记系列一:6 一种新的css预编译器stylus

    stylus是 CSS 的预处理框架.CSS 预处理,顾名思义,预先处理 CSS.那 stylus 咋预先处理呢?stylus 给 CSS 添加了可编程的特性,也就是说,在 stylus 中可以使用变 ...

  9. MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...

  10. Mysql8.0免安装包配置方法

    1. 官网下载mysql_8.0.12免安装包,解压到你存放的地方: https://www.jb51.net/softs/609101.html 2. 配置环境变量(把bin的文件夹弄进系统path ...