php设计模式之观察者模式(Observer)
发表于:2019-08-16 10:33:48浏览:55次
某个对象可以被设置为是可观察的,只要通过某种方式允许其他对象注册为观察者。每当被观察的对象改变时,会发送信息给观察者。
```php
_observers as $key => $obs) {
$obs->onSendMsg( $this, $name );
}
}
// 添加观察者
public function addObserver( $observer ) {
$this->_observers[] = $observer;
}
// 删除观察者
public function removeObserver( $observer_name ) {
foreach ($this->_observers as $key => $observer) {
if($observer_name == $observer->getName()) {
unset($this->_observers[$key]);
return true;
}
}
return false;
}
}
// 观察者
class UserListLogger implements IObserver {
public function onSendMsg( $sender, $args ) {
var_dump("{$args} send to UserListLogger");
}
public function getName() {
return 'UserListLogger';
}
}
// 观察者
class OtherObserver implements IObserver {
public function onSendMsg( $sender, $args ) {
var_dump("{$args} send to OtherObserver");
}
public function getName() {
return 'OtherObserver';
}
}
// client
// 实例 被观察者 对象
$ul = new UserList();
// 增加观察者
$ul->addObserver( new UserListLogger() );
$ul->addObserver( new OtherObserver() );
// 发送消息给观察者
$ul->sendMsg( "Hello World!" );
var_dump("-----------分界线-----------");
// 移除观察者
$ul->removeObserver('UserListLogger');
// 发消息给观察者
$ul->sendMsg( "Hello World Again!");
?>
```
输出
```
vagrant@vagrant-ubuntu:~$ sudo php observer.php
string(35) "Hello World! send to UserListLogger"
string(34) "Hello World! send to OtherObserver"
string(31) "-----------分界线-----------"
string(40) "Hello World Again! send to OtherObserver"
```

