观察者模式常用于日志、记录跟踪等场景,例如我们要添加一个用户,添加完毕后需要执行一系列的功能,例如将这个用户写入到日志文件里,在将用户信息显示出来,我们共需要3个类:1、User类,包含add_user方法
2、Log类, 包含onChanged方法
3、View类,包含onChanged方法
观察者模式的核心原理就是:将Log及View对象传递给User类中的一个数组里,然后当User类的add_user方法执行成功后,迭代这个数组,分别使用两个对象的onChanged方法。
观察者模式的好处在于使各个组件之间不必过度耦合。
下面是一个观察者模式的例子:
<?php
interface IObserver { public function onChanged( $sender, $name ); }
interface IObservable { public function addCustomer( $name ); }
class UserList implements IObservable { private $_observers = array();
public function addCustomer( $name ) { foreach ( $this->_observers AS $obs ) { $obs->onChanged( $this, $name); } }
public function addObserver( $observer ) { $this->_observers []= $observer; } }
class UserListLogger implements IObserver { public function onChanged( $sender, $args ) { echo "$args added to user list"; } }
$ul = new UserList(); $ul->addObserver( new UserListLogger() ); $ul->addCustomer( "Jack" );
?>
|
阅读(569) | 评论(0) | 转发(0) |