您的位置:首页 > 编程语言 > PHP开发

php设计模式-观察者模式

2018-02-23 14:18 615 查看
在web应用中,通常,一些小范围的数据和业务的改变,其他相关的业务数据也需要发生改变,这种情况,观察者模式很适合。

观察者模式,通常是通过使用一个叫Observer的接口实现的,如果其他的类要引入观察者,就要实现这个接口

比如,有一个这样的需求,如果产品汇率改变了,所有产品的相关页面展示信息和价格计算也跟着改变

interface Observer {
function notify( $obj );
}

class ExchangeRate {
static private $instance = NULL;
private $observers = array();
private $exchange_rate;

private function __construct(){
}

private function __clone(){
}

public static function getInstance(){
if( self::$instance == NULL ) {
self::$instance = new ExchangeRate();
}
return self::$instance;
}

public function getExchangeRate(){
return $this->exchange_rate;
}

public function setExchangeRate( $new_rate ){
$this->exchange_rate = $new_rate;
//汇率改变,通知所有观察者
$this->notifyObservers();
}

public function registerObservers( $obj ){
$this->observers[] = $obj;
}

public function notifyObservers(){
foreach( $this->observers as $observer ) {
//通知观察者
$observer->notify( $this );
}
}
}

class ProductItem implements Observer {
public function __construct(){
//注册成为汇率的观察者
ExchangeRate::getInstance()->registerObservers( $this );
}
public function notify( $obj ){
if( $obj instanceof ExchangeRate ) {
echo "请更新产品的汇率" . PHP_EOL;
}
}
}

$p1 = new ProductItem();
$p2 = new ProductItem();

ExchangeRate::getInstance()->setExchangeRate( 6.2 );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: