[php] 设计模式 观察者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq635968970/article/details/52395594
<?php 
//观察者模式
//用游戏的 同盟收到攻击来说明这个模式

//定义被观察者的接口,实现注册观察者,删除观察者和通知的功能
interface Observables
 {
	public function addObserver(observer $ob);
	public function delObserver(observer $ob);
	public function notify();
 }
 class MS implements Observables
 {
	private $_message = '';
	private $_observers = array();
	//添加观察者
    public function addObserver(Observer $observer){
		$this->_observers[] = $observer;
	}
	//删除观察者
	public function delObserver(Observer $observer){
		foreach($this->_observers as $v){
			if($v != $observer){
				 $this->_observers = $v;
			}
		}
	}
	//添加消息
	public function addMessage($message){
		$this->_message = $message;
	}
	public function getMessage(){
		return $this->_message;
	}
	//通知
	public function notify(){
		foreach($this->_observers as $v){
			$v->doActor();
		}
	}
 }
 
//观察者的接口,被通知的时候都要实现的方法
interface Observer
{
    public function doActor();
}

class User implements Observer
{
	protected $_system;
	protected $_username;
	public function __construct($name, $s){
		$this->_system = $s;
		$this->_username = $name;
	}
	public function doActor(){
		echo $this->_system->getMessage().'-通知'.$this->_username;
	}
}

$s = new MS();
$u1 = new User('小红', $s);
$s->addObserver($u1);
$s->addMessage('城管来了');
$s->notify();

?>

猜你喜欢

转载自blog.csdn.net/qq635968970/article/details/52395594
今日推荐