php设计模式实战之--观察者模式

观察者模式用于一个对象改变状态时通知其他对象

以错误处理为例:

1.错误处理中心

2.观察者服务端  利用notify方法, 通过调用其他类的update方法来通知其他类

3.客户端

错误抽象类

写文件方式客户端 继承抽象类

发邮件方式客户端 继承抽象类

代码实例:

<?php
/**
 * 观察处理
 */
class Observer
{
	private $lists = array();

	public function notify($msg)
	{
		foreach($this->lists as $key =>$obj){
			$obj->update($key.'--'.$msg);
		}
	}
	public function add($obj,$type){
		$this->lists[$type] = $obj;
	}
	public function delete($type){
		if(in_array($type,array_keys($this->lists))){
			unset($this->lists[$type]);
		}
	}
}

/**
 *	Error 错误接口
 */
abstract class Error{
	abstract public function update($msg);
}
/**
 * 邮件发送错误
 */
class emailError extends Error{
	public function update($msg){
		$this->sendEmail($msg);
	}

	private function sendEmail($msg){
		echo "发送邮件----错误原因 :$msg<br/>";
	}
}
/**
 * 文件写入错误
 */
class fileError extends Error{
	public function update($msg){
		$this->makeFile($msg);
	}
	private function makeFile($msg){
		echo "写入文件----错误原因 :$msg<br/>";
	}
}

/**
 * 错误处理中心
 */
function makeError($msg)
{
	$server = new Observer();
	$server->add(new emailError(),'email');
	$server->add(new fileError(),'file');

	//$server->delete('file');
	$server->notify($msg);
}

//测试
makeError('数据库密码错误!');
/**
	输出:
	发送邮件----错误原因 :数据库密码错误!
	写入文件----错误原因 :数据库密码错误!
*/


?>

你可能感兴趣的:(设计模式,php设计模式)