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

php当中的观察者模式,在laravel框架中有用到

2015-01-21 23:32 337 查看
<span style="font-size:14px;"><?php
//观察者模式
//抽象主题类
interface Subject
{
	public function attach(Observer $Observer);

	public function detach(Observer $observer);

	//通知所有注册过的观察者对象
	public function notifyObservers();
}

//具体主题角色

class ConcreteSubject implements Subject
{
	private $_observers;

	public function __construct()
	{
		$this->_observers = array();
	}

	//增加一个观察者对象
	public function attach(Observer $observer)
	{
		return array_push($this->_observers,$observer);
	}

	//删除一个已经注册过的观察者对象
	
	public function detach(Observer $observer)
	{
		$index = array_search($observer,$this->_observers);
		if($index === false || !array_key_exists($index, $this->_observers)) return false;

		unset($this->_observers[$index]);
		return true;
	}

	//通知所有注册过的观察者
	public function notifyObservers()
	{
		if(!is_array($this->_observers)) return false;
		foreach($this->_observers as $observer)
		{
			$observer->update();
		}
		return true;
	}
}

//抽象观察者角色

interface Observer
{
	//更新方法
	public function update();
}

//观察者实现
class ConcreteObserver implements Observer
{
	private $_name;

	public function __construct($name)
	{
		$this->_name = $name;
	}

	//更新方法
	
	public function update()
	{
		echo 'Observer'.$this->_name.' has notify';
	}
}

$Subject = new ConcreteSubject();

//添加第一个观察者

$observer1 = new ConcreteObserver('baixiaoshi');
$Subject->attach($observer1);
echo 'the first notify:';
$Subject->notifyObservers();

//添加第二个观察者
$observer2 = new ConcreteObserver('hurong');
echo '<br/>second notify:';
$Subject->attach($observer2);

/*echo $Subject->notifyObservers();

echo '<br/>';

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