php设计模式之观察者模式实例代码
<?php
header("Content-type:text/html;charset=utf-8"); /**
*
*/
class Login implements SplSubject
{
public $hobby;
public $loginTimes;
protected $observers = null; function __construct($hobby)
{
$this->hobby = $hobby;
$this->loginTimes = rand(,);
$this->observers = new SplObjectStorage();
} public function login()
{
// login业务逻辑编写 $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();//将指针往下走一位
// }
foreach ($this->observers as $value) {
$value->update($this);
}
}
} //用户推送-观察者
class PushUser implements SplObserver
{
public function update(SplSubject $subject)//传进来一个被观察者
{
//写自己的业务逻辑
if ($subject->hobby == 'sport') {
echo "推送运动产品<br>";
}else{
echo "推送热门产品<br>";
}
}
} //安全信息推送-观察者
class PushSecurity implements SplObserver
{
public function update(SplSubject $subject)//传进来一个被观察者
{
//写自己的业务逻辑
if ($subject->loginTimes < ) {
echo "你今天第".$subject->loginTimes."次安全登录<br>";
}else{
echo "你今天第".$subject->loginTimes."次安全登录,出现异常登录<br>";
}
}
} //新闻推送-观察者
class PushNews implements SplObserver
{
public function update(SplSubject $subject)
{
//写自己的业务逻辑
if ($subject->hobby == 'sport') {
echo "推送运动新闻<br>";
}else{
echo "推送热门新闻<br>";
}
}
} $user= new Login('sport');//创建一个实现了被观察者的接口类
$user->attach(new PushNews());//传进去一个实现了观察者的接口类
$user->attach(new PushUser());
$user->attach(new PushSecurity());
$user->login();
php设计模式之观察者模式实例代码的更多相关文章
- js设计模式之实现观察者模式实例代码
前端界面 html代码 <body> <select name="" id="select"> <option value=&qu ...
- 设计模式入门,观察者模式,c++代码实现
// test02.cpp : Defines the entry point for the console application.////设计模式第2章 观察者模式#include " ...
- php设计模式之适配器模式实例代码
<?php header("Content-type:text/html;charset=utf-8"); // 适配器模式 /** * 查看天气接口 */ class Ti ...
- php设计模式之装饰模式实例代码
<?php header("Content-type:text/html;charset=utf-8"); /** * 文章编辑类 */ class Article { pr ...
- php设计模式之多态实例代码
<?php header("Content-type:text/html;charset=utf-8"); /** * 虎 */ abstract class Tiger { ...
- php 设计模式之观察者模式(订阅者模式)
php 设计模式之观察者模式 实例 没用设计模式的代码,这样的代码要是把最上面那部分也要符合要求加进来,就要修改代码,不符合宁增不改的原则 介绍 观察者模式定义对象的一对多依赖,这样一来,当一个对象改 ...
- Android使用的设计模式1——观察者模式
设计模式,对程序员来说是一个坎,想在程序员这条路走得更远,设计模式是你的必修课.从大学时代接触GoF到工作几年后重新看设计模式,每次感觉都不一样.这次想借着分析Android Framework源码的 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- [JS设计模式]:观察者模式(即发布-订阅者模式)(4)
简介 观察者模式又叫发布---订阅模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 举一个现实生活中的例子,例如小 ...
随机推荐
- C#从委托、lambda表达式到linq总结
前言 本文总结学习C#必须知道的基础知识,委托.监视者模式.常用lambda表达式.linq查询,自定义扩展方法,他们之间有什么关系呢?匿名委托是如何演变成lambda表达式,lambda再如何导出l ...
- 【spring boot】SpringBoot初学(2.1) - properties读取明细
前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...
- Exec msdb.dbo.sp_send_dbmail 参数详解(SQL Server 存储过程发邮件)
转载oriency755 发布于2012-12-04 11:34:45 阅读数 6870 收藏 sp_send_dbmail [ [ @profile_name = ] 'profile_name ...
- sqli-labs less-5 --> less-6
盲注笔记: SQL盲注攻击:只有两种回显结果,错误和正确:无法用url查询爆出数据库的信息:回显注入语句中加入判断方式,使得回显结果为true或者false: SQL盲注分类:布尔盲注,时间盲注,报错 ...
- MySQL优化(三)——主从复制
1.MySQL高可用 主从复制 一主多备 多主多备 2.MySQL主从复制 主机所有写的数据都会生成二进制SQL日志执行文件,从机只 ...
- kubernetes nodePort、targetPort、port、containerPort图解
1. nodePort 外部机器可访问的端口. 比如一个Web应用需要被其他用户访问,那么需要配置type=NodePort,而且配置nodePort=,那么其他机器就可以通过浏览器访问scheme: ...
- Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String
题目链接:http://codeforces.com/contest/1295/problem/C 题目:给定字符串s,t. 给定一个空串z,需要按照规则把z构造成 string z == stri ...
- 莫凡_linux
1.安装软件 2.基本命令ls和cd cd 指令 第一个要知道的指令就是怎么样去到你想去的地方. cd (Change Directory) 就是干这个的. 找到 Linux 的 terminal 窗 ...
- 机器学习作业(三)多类别分类与神经网络——Matlab实现
题目太长了!下载地址[传送门] 第1题 简述:识别图片上的数字. 第1步:读取数据文件: %% Setup the parameters you will use for this part of t ...
- Linux下tomcat端口被占用
首先查看占用端口的程序 netstat -alnp | grep 8080 然后出现 tcp6 2 0 :::8080 :: LISTEN 1392/java 杀死端口号 kill -9 1392(进 ...