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

<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>
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值