大话设计模式-观察者模式

//通知者接口
interface Subject {
	function attach($observer);
	function detach($observer);
	function notify();
}

//老板
class Boss implements Subject {
	//同事列表
	private $observers = array();
	private $action;
	private $subjectState;

	public function __set($key, $value) {
		$this->$key = $value;
	}

	public function __get($key) {
		if(isset($this->$key)) {
			return $this->$key;
		} else {
			return NULL;
		}
	}

	//增加
	public function attach($observer) {
		array_push($this->observers, $observer);
	}

	//减少
	public function detach($observer) {
		$insex = array_search($observer, $this->observers);
		unset($this->observers[$insex]);
	}

	//通知
	public function notify() {
		foreach($this->observers as $v) {
			$v->update();
		}
	}

}

//抽象观察者
abstract class Observer {
	protected $name;
	protected $sub;

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

	public abstract function update();
}

//看股票的同事
class StockObserver extends Observer {
	public function __construct($name, $sub) {
		parent::__construct($name, $sub);
	}

	public function update() {
		echo $this->sub->subjectState.$this->name.'关闭股票行情,继续工作。';;
	}
}

//看NBA的同事
class NBAObserver extends Observer {
	public function __construct($name, $sub) {
		parent::__construct($name, $sub);
	}

	public function update() {
		echo $this->sub->subjectState.$this->name.'关闭NBA直播,继续工作。';;
	}
}


//客户端代码
//老板胡汉三
$huhansan = new Boss();

//看股票的同事
$tongshi1 = new StockObserver('魏关宅', $huhansan);
//看NBA的同事
$tongshi2 = new NBAObserver('易管查',$huhansan);

$huhansan->attach($tongshi1);
$huhansan->attach($tongshi2);

$huhansan->detach($tongshi1);

//老板回来
$huhansan->subjectState = '我胡汉三回来了!';
//发出通知
$huhansan->notify();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值