观察者模式

事件机制常用到 

相关问题https://www.oschina.net/question/2243420_2237246

<?php
abstract class SubjectAbstract implements SplSubject
{
	protected $status = '';
	abstract public function getStatus();
	abstract public function setStatus($status);
}

class Subject extends SubjectAbstract
{
	
	protected $status = '';
	protected $observers=[];
	
	public function __construct($status='on')
	{
		$this->status = $status;
	}
	
	public function getStatus()
	{
		return $this->status;
	}
	public function setStatus($status)
	{
		return $this->status = $status;
	}
	
	public function attach(SplObserver $observer){
		$this->observers[]=$observer;
	}
	public function detach(SplObserver $observer){
		foreach($this->observers as $key=>$val){
			if($val === $observer){
				unset($this->observers[$key]);
			}
		}
	}
	public function notify(){
		foreach($this->observers as $key=>$observer){
			$observer->update($this);
		}
	}
}

class AObserver implements SplObserver
{
	public function update(SplSubject $subject)
	{
		echo __class__.'获取到主题状态改变成:'.$subject->getStatus()."\n";
	}
}
class BObserver implements SplObserver
{
	public function update(SplSubject $subject)
	{
		echo __class__.'获取到主题状态改变成:'.$subject->getStatus()."\n";
	}
}

class CObserver implements SplObserver
{
	public function update(SplSubject $subject)
	{
		echo __class__.'获取到主题状态改变成:'.$subject->getStatus()."\n";
	}
}
var_dump(new AObserver instanceof SplSubject);
$subject = new Subject('on');
$subject->attach(new AObserver);
$subject->attach(new BObserver);
$c = new CObserver;
$subject->attach($c);
//$subject->detach($c);
$subject->setStatus('off');
$subject->notify();

 

 

 

转载于:https://my.oschina.net/simaguo/blog/873477

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值