【PHP模式】面向任务的模式-观察者模式

观察者模式
观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。

场景设计
设计一个订单类
订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
原始的方法,是将这些操作都写在create函数里面
但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
这个时候,观察者模式出现了。

代码设计
//观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。
//观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。
//以一个购物流程为例子

class order {  
  
	protected $observers = array(); // 存放观察容器  
	  
	//观察者新增  
	public function addObServer($type, $observer) {  
		$this->observers[$type][] = $observer;  
	}  
	  
	//运行观察者  
	public function obServer($type) {  
		if (isset($this->observers[$type])) {  
			foreach ($this->observers[$type] as $obser) {  
				$a = new $obser;  
				$a->update($this); //公用方法  
			}  
		}  
	}  
	  
	//下单购买流程  
	public function create() {  
		echo '购买成功';  
		$this->obServer('buy'); // buy动作  
	}  
}  
class orderEmail {  
	public static function update($order) {  
		echo '发送购买成功一个邮件';  
	}  
}  
class orderStatus {  
	public static function update($order) {  
		echo '改变订单状态';  
	}  
}  
$ob = new order;  
$ob->addObServer('buy', 'orderEmail');  
$ob->addObServer('buy', 'orderStatus');  
$ob->create(); 

郑重声明:

1 本资源来源于互联网,资源的版权归资源原作者所持有,受《中华人民共和国著作权法》等相关法律保护。

2 由于无法和原作者取得联系,所以上传的部分资源无法先通过原作者的同意就分享给大家了,如本资源侵犯了您(原作者)的权益,请联系我们(微信号 xiaohaimei1989),我们会立马删除您的资源,并向您表达诚挚的歉意!

3 本站是一个公益型网站,分享资源的目的在于传播知识,分享知识,收取一点点打赏的辛苦费是用于网站的日常运营开支,并非用于商业用途。

4 本站资源只提供学习和参考研究使用,使用过后请在第一时间内删除。本站不承担资源被单位或个人商用带来的法律责任。

发表评论