PHP观察者模式原理与简单实现方法示例
作者:LoveJulin 发布时间:2024-05-03 15:49:15
标签:PHP,观察者模式
本文实例讲述了PHP观察者模式原理与简单实现方法。分享给大家供大家参考,具体如下:
当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件、积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新。
观察者模式符合接口隔离原则,实现了对象之间的松散耦合。
观察者模式UML图:
在php SPL中已经提供SplSubject和SqlOberver接口
interface SplSubject
{
function attach(SplObserver $observer);
function detach(SplObserver $observer);
function notify();
}
interface SqlObserver
{
function update(SplSubject $subject);
}
下面具体实现上面例子
class Subject implements SplSubject
{
private $observers;
public function attach(SplObserver $observer)
{
if (!in_array($observer, $this->observers)) {
$this->observers[] = $observer;
}
}
public function detach(SplObserver $observer)
{
if (false != ($index = array_search($observer, $this->observers))) {
unset($this->observers[$index]);
}
}
public function post()
{
//post相关code
$this->notify();
}
private function notify()
{
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
public function setCount($count)
{
echo "数据量加" . $count;
}
public function setIntegral($integral)
{
echo "积分量加" . $integral;
}
}
class Observer1 implements SplObserver
{
public function update($subject)
{
$subject-> setCount(1);
}
}
class Observer2 implements SplObserver
{
public function update($subject)
{
$subject-> setIntegral(10);
}
}
class Client
{
public function test()
{
$subject = new Subject();
$subject->attach(new Observer1());
$subject->attach(new Observer2());
$subject->post();//输出:数据量加1 积分量加10
}
}
希望本文所述对大家PHP程序设计有所帮助。
来源:http://www.cnblogs.com/LoveJulin/p/5139073.html
0
投稿
猜你喜欢
- 使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱
- 一、抓取全部评论吾的这篇文章,有 1022 次评论,一条条看,吾看不过来,于是想到 Python 词云,提取关键词,倒也是一桩趣
- 原来在robotframework中使用press key方法进行键盘的操作,但是该方法需要写 * 作对象的locator,不是很方便,现在找
- 摆线最简单的旋轮线就是摆线,指圆在直线上滚动时,圆周上某定点的轨迹。设圆的半径为 r ,在x轴上滚动 x距离则意味着旋转了 x
- 用tensorflow构建简单的线性回归模型是tensorflow的一个基础样例,但是原有的样例存在一些问题,我在实际调试的过程中做了一点自
- 许多的语言,为了将异步模式处理得更像平常的顺序,都包含一种有趣的方案库,它们被称之为promises,deferreds,或者futures
- SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
- 交互设计就是研究人与物体之间如何互动的问题,比如按电梯时,按钮立即高亮,同时屏幕上显示电梯现在所在楼层数,这个过程就是交互设计,而电梯按钮用
- 前言我们的游戏资源处理工具是Python实现的,功能包括csv解析,UI材质处理,动画资源解析、批处理,Androd&iOS自动打包
- 随着深度学习的发展,在大模型的训练上都是在一
- 本文实例分析了Python多线程操作数据库相关问题。分享给大家供大家参考,具体如下:python多线程并发操作数据库,会存在链接数据库超时、
- 本文作者系程序猿Daniel F Pupius,这是一篇他发表在Medium上的博文,讲述自己怎么在实际写代码的过程中,发现在效率和质量间做
- <?php /** 默认首页 **/ class DefaultController extends AppController {
- 寻觅工具确定任务之后第一步就是找个趁手的库来干活。 Python Excel上列出了xlrd、xlwt、xlutils这几个包,但是它们都比
- 一、实现代码1.sql-- phpMyAdmin SQL Dump-- version 4.5.1-- http://www.phpmyad
- 在近日的写Web程序时用到了Access的模糊查询,在Acces里写代码怎么也找不到记录后来才起来原来Acess和SqlServer的模糊查
- SQL SERVER数据库用datetime类型的时候 如果插入NULL,没有问题 如果插入空串"",就会默认1900-
- 目录引言 操作多线程/多进程1、创建线程池2、submit3、map4
- js代码: <script> window.onload = function(){ <PRE class=javascr
- 关于作者 王丹丹 , IBM 中国系统与技术中心软件工程师,自从 2006 年加入 IBM,一直从事 Web 系统设计和开发工作,有五年 P