- 浏览: 41958 次
文章分类
最新评论
所谓,观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
观察者类:
1.抽象主题角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以任意多个观察者。抽象主题提供了增加和删除观察者对象的接口。
2.抽象观察者角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己
3.具体主题角色:存储相关状态到具体观察者对象,当具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
4.具体观察者角色:存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致
作用:
1. 观察者模式的耦合度较小
2.支持广播通信
在网上众多的php 教程中,对php设计模式的讲解,多限于理论的介绍,但是学习设计模式必须要有实例,才能加深理解。
来看本文章给出的实例代码:
观察者类:
1.抽象主题角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以任意多个观察者。抽象主题提供了增加和删除观察者对象的接口。
2.抽象观察者角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己
3.具体主题角色:存储相关状态到具体观察者对象,当具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
4.具体观察者角色:存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致
作用:
1. 观察者模式的耦合度较小
2.支持广播通信
在网上众多的php 教程中,对php设计模式的讲解,多限于理论的介绍,但是学习设计模式必须要有实例,才能加深理解。
来看本文章给出的实例代码:
<?php //抽象主题 interface Subject{ public function attach($observer); public function detach($observer); public function notifyObservers(); } //具体主题 class ConcreateSubject implements Subject{ private $_observers; public function __construct(){ $this->_observers = array(); } public function attach($observer){ return array_push($this->_observers,$observer); } public function detach($observer){ $index = array_search($observer,$this->_observers); if($index === false || !array_key_exists($index,$this->_observers)){ return false; } unset($this->_observer[$index]); return true; } public function notifyObservers(){ if(!is_array($this->_observers)){ return false; } foreach($this->_observers as $observer){ $observer->update(); } return true; } } //抽象观察者 interface Observer{ public function update(); } //具体观察者 class ConcreteObserver implement Observer{ private $_name; public function __construct($name){ $this->_name = $name; } public function update(){ echo 'Observer',$this->_name.'has notified<br/>'; } } //客户端 class Client{ public static function main(){ $subject = new ConcreteSubject(); //新增第一个观察者 $observer1 = new ConcreteObserver('Martin'); $subject->attach($observer1); //通知 $subject->notifyObservers(); //新增第二个观察者 $observer2 = new ConcreteObserver('jaky'); $subject->attach($observer2); //通知 $subject->notifyObservers(); //删除观察者1 $subject->deatch($observer1); //通知 $subject->notifyObservers(); } } Client::main(); ?>
发表评论
-
php导出word格式数据的代码一例
2013-11-14 16:24 1099发布:thatboy 来源:脚本学堂 【 大 ... -
php生成word文档的代码
2013-11-07 11:51 1195一、用windows里面自带的com,然后用 php生成wo ... -
php 导出word(可包含图片)
2013-11-07 11:44 811发布:sunday01 来源:Net 今天 为大家介绍 ... -
PHP获取域名及域名IP的方法
2013-10-17 15:46 2364最近在做的一个项目用到获取域名和IP的功能,大致有以下几种方法 ... -
php socket模拟http中post或get提交数据
2013-08-08 12:19 2677php socket模拟http中post或者get提交数据的 ... -
浅析php变量作用域的一些问题
2013-08-08 12:14 601学过C的人用php的时候一 ... -
下载站mime属性设置(让文件可下载)
2013-07-18 16:02 806一些下载网站为了支持更多的格式,一般情况下支持rar,zip等 ... -
PHP 数组和字符串互相转换的方法分享
2013-07-18 15:58 524PHP 具有两个函数,可以在字符串和数组之间互相进行转换。 ... -
php数组与字符串的转换函数整理汇总
2013-07-18 15:52 771对php中的数组与字符串的转换函数进行了详细的整理汇总。 1 ... -
php文件上传与下载的实例分享
2013-07-18 15:49 676分享有关php下载的相关文章。 先分享几个文件下载类: ph ... -
php设计模式之命令模式的应用举例
2013-05-21 22:50 467所谓,命令模式:将一个请求封装为一个对象,从而你可用不同的请求 ... -
php生成随机密码的函数一例
2013-05-21 22:42 463生成随机密码的函数,可自定义密码长度。 <?php / ... -
php打印网页的代码举例
2013-05-02 23:17 1335本文出处参考:http://www.jbxue.com/art ... -
php iconv字符串编码转换(GBK到UTF8字符集)的方法与实例
2013-05-02 23:14 3629本文原始链接:http://www ... -
一个php ftp类(复制、移动、删除文件、创建目录等)
2013-05-01 05:06 735一个不错的ftp操作类,可以完成复制、移动、删除文件、创建目录 ... -
php get_headers 判断URL是否有效的方法
2013-05-01 05:02 1085使用php get_headers判断url的真实有效性。 还 ... -
PHPmailer 邮件群发的实例代码
2013-05-01 05:00 752本文出处参考:http://www.jbxue.com/art ... -
PHPMailer邮件类发送邮件举例(smtp.163.com)
2013-04-27 22:27 16281、下载PHPMailer文件包,PHPMailer邮件发送类 ... -
PHP 获取指定月对应天数的代码
2013-04-17 05:59 607<?php /** * 获取指定月对应的天数 * ... -
php计算时间差的简单例子
2013-04-17 05:57 544例子:计算借书的天数,根据每天的日期进行计算。 (1) 有数 ...
相关推荐
主要介绍了PHP设计模式之观察者模式定义与用法,结合实例形式分析了php观察者模式的具体定义及相关使用操作技巧,需要的朋友可以参考下
主要介绍了php设计模式之观察者模式定义与用法,结合完整实例形式详细分析了php观察者模式概念、原理、定义与使用方法,代码注释包含详尽的说明,需要的朋友可以参考下
本文实例讲述了php设计模式之观察者模式。分享给大家供大家参考,具体如下: 当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何...
24种设计模式的入门,整合7种开发语言的代码示例。 (C#、JAVA、JavaScript、C++、Python、Go、PHP) 第一节 设计模式:学习顺序 第二节 简单工厂模式 第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第...
php-observer-example什么是观察者模式“观察者模式是一种软件设计模式,在该模式中,称为主题的对象会维护其依赖者的列表(称为观察者),并通常通过调用其方法之一来自动通知状态变化。它主要用于实施分布式事件...
设计模式存储库包含以php实现的设计模式...创建抽象工厂工厂方法工厂单例结构适配器复合装饰器外观外观行为命令迭代器观察者策略模板方法测试$ composer install $ ./vendor/bin/phpunit许可证GPLv3。 请参阅许可文件。
该项目是一组在现实世界场景中使用不同设计模式的简单示例。 每个都有一个简短的描述和指南: 游客 命令 空对象 流畅的界面 规格 到目前为止,已经描述了以下模式: 创作: 工厂方法 抽象工厂 单身人士 建造者 ...
设计模式存储库 PHP 8中23种主要设计模式的实现示例 创作模式 工厂方法 原型 结构模式 适配器 桥 合成的 装潢师 轻量级 代理 行为模式 责任链 命令 口译员 迭代器 调解员 纪念 观察者 状态 战略 模板方法 游客
模式示例 创作模式: 抽象工厂 工厂方法 建造者 原型 辛格尔顿 结构模式: 适配器 装潢师 代理人 桥 合成的 正面 轻量级 行为模式: 责任链 命令 迭代器 调解员 纪念 观察者 状态 战略
这是一组众所周知的设计模式以及一些示例代码的集合,这些示例代码如何在C ++,Java,Python等中(稍后)实现它们。 ##进步 图案 描述 C ++ Java Python PHP Perl 单身人士 代理人 建造者 命令 装饰工 正面 ...
包含基本PHP设计模式,包括 适配器图案 告诉,不要问模式(2个示例) 模板方法模式 责任链模式 装饰图案 策略模式 观察者模式 很快,工厂模式和单例模式将被添加到该库中。 最初由Jeffrey Way教授的模式。 有趣PHP...
PHP设计模式 [ ] 这是PHP语言中使用设计模式的实际示例的回购。 设计模式 辛格尔顿 原型 抽象工厂 财产 工厂方法 建造者 适配器 正面 代理 战略 依赖注入 观察者 执照 该项目是根据MIT :copyright:许可的条款许可的...