Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82384
  • 博文数量: 35
  • 博客积分: 1772
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 14:39
文章分类
文章存档

2012年(1)

2011年(16)

2010年(18)

我的朋友

分类:

2010-04-24 15:36:56

观察者模式常用于日志、记录跟踪等场景,例如我们要添加一个用户,添加完毕后需要执行一系列的功能,例如将这个用户写入到日志文件里,在将用户信息显示出来,我们共需要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" );

?>


阅读(577) | 评论(0) | 转发(0) |
0

上一篇:php的单例模式

下一篇:MYSQL 编译安装优化

给主人留下些什么吧!~~