版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
?>