观察者模式

观察者模式

//被观察者
interface Isubject{
	function attach(Iobserver $observer);
	function detach();
	function notify();
}
//观察者
interface Iobserver{
	function change(Isubject $subject);
}

class subject implements Isubject{
	protected $observers;
	protected $value;

	function attach(Iobserver $observer){
		$this->observers[] = $observer;	
	}
	function detach(){
		
	}
	
	/**
	 通知 所有观察者
	*/
	function notify(){
		foreach($this->observers as $observer){
			$observer->change($this);
		}
	}

	function setvalue($value){
		$this->value = $value;
		$this->notify();
	}
	function getvalue(){
		return $this->value;
	}
}

class observer implements Iobserver{
	function change(Isubject $subject){
		echo '被观察者 行动了:'.$subject->getvalue().'<br>';
	}
}


$subject = new subject();//被观察者
$observer = new observer();//观察者x

$subject->attach($observer);//被观察者先要注册观察者(即 有哪些观察者?)
$subject->setvalue(5);//被观察者行动了(设置值为5),notify()方法通知观察者change()


/*
有这样的需求:
订单状态更新时 (被观察者 订单状态类,需封装)
更新用户积分   (观察者   积分类) changeOrderStatus();//订单状态更新时
更新商品库存   (观察者   商品类)
......
方法:
需封装,由于有多个地方可能更改订单状态类(前台用户或后台管理员等),
所以,实例化订单状态类时就注册好所有观察者(构造函数)

*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值