定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己.

应用场景:
某个实例的变化影响到了其他对象.

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();
// 产品一旦被购买,我们就通知库存.

  

最新文章

  1. 关于delphi exit 继承
  2. MFC去掉标题栏
  3. C#自动生成漂亮的水晶效果头像
  4. Robot_bfs
  5. Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例
  6. 关于android中Bundle的使用
  7. h5 如何打包apk
  8. poj3086---数论
  9. Arachnid包含一个简单的HTML剖析器能够分析包含HTML内容的输入流
  10. spring mvc接收List集合、JUI传JSP List
  11. MIP技术进展月报第2期: 数据绑定,异步脚本加速
  12. eclipse打开工作空间(workspace)没有任务反应
  13. Qt 适合做界面
  14. rem实现自适应
  15. NOI-1.1-06-空格分隔输出-体验多个输入输出
  16. [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]
  17. ICC2 常用命令
  18. Devexpress VCL Build v2014 vol 14.1.4 发布
  19. CSS一个属性,让图片后的文字垂直居中,效果看得见
  20. 项目经验总结-first

热门文章

  1. 使用AutoMapper 处理DTO数据对象的转换
  2. codevs 1085
  3. 《Java编程思想》笔记 第八章 多态
  4. ttk.Treeview
  5. IE67下去掉input边框
  6. 使用 gulp 压缩 JS
  7. A - Enterprising Escape 【BFS+优先队列+map】
  8. 浅谈Java中final,finalized,finally
  9. 【数学期望】【高斯消元】bzoj3143 [Hnoi2013]游走
  10. 13test04:捕鱼