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)
简介 观察者模式又叫发布---订阅模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 举一个现实生活中的例子,例如小 ...
随机推荐
- Python三元表达式、列表推导式、生成器表达式
1. 三元表达式 name=input('姓名>>: ') res='SB' if name == 'aaaa' else 'NB' print(res) 2. 列表推导式 #1.示例 e ...
- docker下载镜像太慢的解决方案
参考链接:https://blog.csdn.net/weixin_43569697/article/details/89279225 docker下载镜像卡死或太慢找了网上很多方法,使用镜像中国也是 ...
- 浅识mysql主键
primary key:主键,又叫主键约束. primary key在表中是唯一代表一条记录的.primary key可以是1列,或者多列组合而成的. 如何查看一个表的主键是什么,举个例子: desc ...
- 中文 json_encode之后字符长度问题
问题描述: 将某个字符串$str 进行json编码,即json_encode($str)后变成Unicode字符存入数据库,会发现中文的长度明明没有超过设置的字符长度最大值,但是却抛出字段长度过长错误 ...
- Hibernate + mysql 配置
1.生成po的配置 2.连接 MySQL 数据库的配合
- 你这是virus吧?
谁在我的vps上跑了这个?我的备份终于起一定作用了. GO declare @sql varchar(8000) while (select count(*) from sysobjects wher ...
- vue中的this.$nextTick()使用
首先我们来翻译一下nextTick是什么意思:下一个刻度 再来看看vue官网怎么说的: Vue.nextTick( [callback, context] )在下次 DOM 更新循环结束之后执行延迟回 ...
- Linux的常用命令---这是对Linux最基本的尊重
Linux: 诞生日期:1991年 开发者:林纳斯·托瓦茨 特点:免费,开源 发行版本:centos|red Hat|Ubuntu|红旗等 思想:一切都是文件 重要文件目录 bin:二进制文件(命令) ...
- cf 手机短信问题
题目链接:https://vjudge.net/contest/331120#problem/C 题目:你有一部手机,最多显示k个人发的信息,现在收到n条信息,有可能人是相同的人发的.最新的要顶置,当 ...
- java单词统计
要求1:输出某个英文文本文件中26字母出现的频率,由高到低排序,并显示字母出现的百分比,精确到小数点后两位. 思路:分别设存放字母和字母出现次数的数组,遍历文件内容,将字母及出现频率按由高到低的顺序输 ...