B2:观察者模式 Observer
2024-08-24 23:40:35
定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己.
应用场景:
某个实例的变化影响到了其他对象.
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();
// 产品一旦被购买,我们就通知库存.
最新文章
- 关于delphi exit 继承
- MFC去掉标题栏
- C#自动生成漂亮的水晶效果头像
- Robot_bfs
- Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例
- 关于android中Bundle的使用
- h5 如何打包apk
- poj3086---数论
- Arachnid包含一个简单的HTML剖析器能够分析包含HTML内容的输入流
- spring mvc接收List集合、JUI传JSP List
- MIP技术进展月报第2期: 数据绑定,异步脚本加速
- eclipse打开工作空间(workspace)没有任务反应
- Qt 适合做界面
- rem实现自适应
- NOI-1.1-06-空格分隔输出-体验多个输入输出
- [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]
- ICC2 常用命令
- Devexpress VCL Build v2014 vol 14.1.4 发布
- CSS一个属性,让图片后的文字垂直居中,效果看得见
- 项目经验总结-first