PHP 观察者模式的实现代码
代码如下所示:
代码如下:
//被察者抽象类 class Observed implements SplSubject{ protected $_name; protected $_observers; <p> //实例化,生成一个观察者对象 public function __construct(){ $this->_observers = new SplObjectStorage(); }</p> <p> // 添加观察者对象 public function attach(SplObserver $observer){ $this->_observers->attach($observer); }</p> <p> //删除观者对象 public function detach(SplObserver $observer){ $this->_observers->detach($observer); }</p> <p> //通知消息 public function notify(){ foreach($this->_observers as $observer){ $observer->showMessage($this); } }</p> <p> //普通方法: 设置值 public function setName($name){ $this->_name = $name; $this->notify(); }</p> <p> //普通方法: 获取值 public function getName(){ return $this->_name; }</p> <p> //普通方法:设置年龄 public function setAge($age){ $this->age = $age; foreach($this->_observers as $observer){ $observer->showAge($this->_name,$this->age); } }</p> <p>}</p> <p>// 观察者抽象类 class Observer implements SplObserver{</p> <p> //显示消息提示 public function showMessage(SplSubject $obj){ $user = $obj->getName(); if($user==='admin'){ echo '您好, ',$user,'欢迎您进入管理后台<br/>'; }else{ echo "你好, '$user' 你已经被添加到了用户列表<br/>"; } } //这是继承父类的抽象方法 public function update(SplSubject $subject) {}</p> <p> //显示个人年龄 public function showAge($name,$age){ echo "<script>alert('$name 的年龄是: $age')</script>"; } }</p> <p>$subject = new Observed(); //生成一个被观察者对象 $observer = new Observer(); //生成一个观察者对象 $subject->attach($observer);//把观察者传入到被观察中去 $subject->setName('张三'); //调用 setName 方法 /* * 通过面的 setName 就会调用 $this->notify(); * 通过调用 $this->notify()就会调用 $observer->showMessage($this)方法, * 即每个观察者对象的 showMessage($obj)方法; */ $subject->setName('admin'); $subject->setAge(24); </p>
相关推荐
xzkjgw 2020-02-17
Stranger 2020-02-12
JF0 2020-01-12
luckymaoyy 2019-12-24
老杨叔叔 2016-02-03
Marsdanding 2019-06-30
dynsxyc 2019-06-30
guojing 2013-06-01
chengrile 2013-03-17
chaigang 2019-06-28
凌燕 2019-06-28
Android进阶 2019-06-27
dz00 2019-06-26
刘阳龙Herman 2019-06-14
xishizhaohua 2019-06-21
xhqiang 2019-06-21
trandy 2013-09-15