B2:观察者模式 Observer
定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己.
应用场景:
某个实例的变化影响到了其他对象.
UML:

示例代码:
class Product
{
private $observers = array();
private $pid = 0; public function __construct($pid)
{
$this->pid = $pid;
} // 注册观察者
public function attachObserver($observer)
{
$this->observers[] = $observer;
} public function buy()
{
//.....
$this->notify();
} // 通知观察者
public function notify()
{
foreach ($this->observers as $obj) {
$obj->receiveBuy($this);
}
} public function getPid()
{
return $this->pid;
}
} interface ProductObserver
{
public function receiveBuy(Product $pro);
} class Repertory implements ProductObserver
{
public function receiveBuy(Product $pro)
{
echo $pro->getPid() . "被购买了,库存可以减去1了";
}
} // 调用示例
$product = new Product('s100');
$product->attachObserver(new Repertory());
$product->buy();
// 产品一旦被购买,我们就通知库存.
B2:观察者模式 Observer的更多相关文章
- 设计模式 - 观察者模式(Observer Pattern) 详细说明
观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 设计模式 - 观察者模式(Observer Pattern) 详细解释
观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
观察者模式 Observer 意图 定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新. 别名:依赖(Dependents),发布订阅(Publish-Su ...
- 8.5 GOF设计模式四: 观察者模式Observer
GOF设计模式四: 观察者模式Observer 现实中遇到的问题 当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式 观察者模式 ...
- 设计模式-观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...
- jQuery中的观察者模式(Observer Pattern)
在jQuery中,on方法可以为元素绑定事件,trigger方法可以手动触发事件,围绕这2个方法,我们来体验jQuery中的观察者模式(Observer Pattern). ■ on方法绑定内置事件, ...
随机推荐
- python3生成测试数据,并写入ssdb
import pyssdb import random import time c = pyssdb.Client() chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoP ...
- python 机器学习框架scikit-learn安装
1.windows环境whl包下载地址 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 2.安装numpy.scipy.scikit-learn.matplotl ...
- 分分钟搞定 JSP 技术
一.JSP的语法 1.模版元素 写在JSP中的html内容 在翻译后的Servlet中, 直接被out.write原样输出 2.JSP脚本表达式 格式: ...
- MySQL 使用硬链接配合truncate 删除2.2T的表
1 创建tmp 表并 rename 表 mysql> rename table ep to ep_bak; Query OK, 0 rows affected (0.07 sec) mysql& ...
- Oralce聚合多行
拼接的字符串长度满足varchar2(4000)时, 可以用 LISTAGG(NAME, '_') WITHIN GROUP(ORDER BY LEVEL_T DESC) 当拼接大段文本时,采用 10 ...
- 灯泡游戏 (Kruskal)(并查集)
灯泡游戏 时间限制: 1 Sec 内存限制: 64 MB提交: 9 解决: 4[提交][状态][讨论版] 题目描述 有 一个n行m列的矩阵,左上角坐标是(0,0),右下角坐标是(n-1,m-1). ...
- Linux命令之fdisk
fdisk fdisk [选项] <disk> 改变分区表 fdisk [选项] –l <disk> 列出所有分区表 fdisk –s <partition(分区编号 ...
- 转:mysql group by 用法解析(详细)
group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...
- 【kmp算法】【Rabin-Karp算法】bzoj2462 [BeiJing2011]矩阵模板
算法就不说了,反正是基于字符串匹配的.这里比较一下kmp和Rabin-Karp算法. <法一>kmp算法. 592788 lizitong 2462 Accepted 4828 kb 68 ...
- 【分块答案】【最小生成树】【kruscal】bzoj1196 [HNOI2006]公路修建问题
二分(分块)枚举 边权上限.用kruscal判可行性. #include<cstdio> #include<algorithm> #include<cstring> ...