<?php /** *
观察者模式 *
@author: Mac *
@date: 2012/02/22 */ class Paper{ /*
主题 */ private $_observers = array (); public function register( $sub ){ /*
注册观察者 */ $this ->_observers[]
= $sub ; } public function trigger(){ /*
外部统一访问 */ if (! empty ( $this ->_observers)){ foreach ( $this ->_observers as $observer ){ $observer ->update(); } } } } /** *
观察者要实现的接口 */ interface Observerable{ public function update(); } class Subscriber implements Observerable{ public function update(){ echo "Callback\n" ; } } |
下面是测试代码
/*
测试 */ $paper = new Paper(); $paper ->register( new Subscriber()); //$paper->register(new
Subscriber1()); //$paper->register(new
Subscriber2()); $paper ->trigger();
当新对象要填入的时候,只需要在主题(又叫可观察者)中进行注册(注册方式很多,你也可以在构造的时候, 或者框架访问的接口中进行注册),然后实现代码直接在新对象的接口中进行。这降低了主题对象和观察者对象的耦合度。
参考:Head
First 设计模式 |