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

本文通过一个游戏同盟的例子详细解释了观察者模式的实现原理。包括定义被观察者接口、实现观察者注册、删除及通知等功能,并展示了如何通过具体类实现这些功能。
<?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();

?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值