<?php
class ExchangeRate implements SplSubject
{
private static $instance = null;
private $observers = [];
private $exchange_rate;
private function __construct()
{
}
public static function getInstance()
{
if (self::$instance == null) {
self::$instance = new self();
}
return self::$instance;
}
public function getExchangeRate()
{
return $this->exchange_rate;
}
public function setExchangeRate($exchange_rate)
{
$this->exchange_rate = $exchange_rate;
$this->notify();
}
public function attach(SplObserver $observer)
{
$this->observers[] = $observer;
}
public function detach(SplObserver $observer)
{
$this->observers->detach($observer);
}
public function notify()
{
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
}
class ProductItem implements SplObserver
{
public function __construct()
{
ExchangeRate::getInstance()->attach($this);
}
public function update(SplSubject $subject)
{
if ($subject instanceof ExchangeRate) {
print "Received update!\n";
}
}
}
$product1 = new ProductItem();
$product2 = new ProductItem();
观察者模式
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 原生KVO的实现依赖于强大的runtime运行时机制,实现原理大致为:当观察某对象A的属性时,会动态的创建这...
- 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式 ...
- 状态模式 不需要总结, 一句话就是说, 在不同的状态下, 执行不同的操作.例如, 转发按钮的onClick处理, ...