理解观察者模式

当我在IBM developerWorks 中国上看到五种常见的 PHP 设计模式这篇文章的时候,我才开始注意设计模式的。其中这个观察者模式,我当时实在是没看懂到底是什么意思,昨天在看ZendFramework中的Zend_Filter组件的例子的时候,才突然发现原来是这么回事。

在0.8版中, Zend_Filter提供一种过滤链的机制,这种设计就是使用了观察者模式。代码如下:

$filterChain = new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_Alpha())
            ->
addFilter(new Zend_Filter_StringToLower());

// Filter the username
$username $filterChain->filter($_POST['username']);

所有过滤器都实现Zend_Filter_Interface接口,然后通过Zend_Filter对象的addFilter注册被观察者对象,也就是这些过滤器。最后调用Zend_Filter的filter方法,遍历被观察者的对象,并执行Zend_Filter_Interface中实现的的filter操作。

分享到: 更多