观察者模式常用于日志、记录跟踪等场景,例如我们要添加一个用户,添加完毕后需要执行一系列的功能,例如将这个用户写入到日志文件里,在将用户信息显示出来,我们共需要3个类:1、User类,包含add_user方法
观察者模式常用于日志、记录跟踪等场景,例如我们要添加一个用户,添加完毕后需要执行一系列的功能,例如将这个用户写入到日志文件里,在将用户信息显示出来,我们共需要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" );
?>
本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2010/0427/22349.php
评论