最新消息:

设计模式之观察者模式

PHP 494浏览 0评论

设计思想:

    面向对象中,观察者模式定义对象的一对多依赖,也即是,当一个对象改变状态时,他的所有依赖者(观察者)都会收到通知并自动更新!

设计原则:

    主题和观察者都是用接口:主题首先注册观察者,再根据观察者提供接口通知观察者。如此,两者便有协同运作,同时又具有松耦合的优点——这也就是面向接口编程的好处,而不是针对实现编程。

    观察者模式利用“组合”将多个观察者注册进主题中。对象(主题&观察者)之间的关系不是通过继承协作,而是在运行时利用组合方式产生的。——多组合,少继承。

代码示例:

<?php
/**
    主题
*/
class Paper
{
        public $_observers = [];

        /**
                注册观察者
        */
        public function register($sub)
        {
                $this->_observers[] = $sub;
        }

        public function trigger()
        {
                if (empty($this->_observers)) return false;

                foreach($this->_observers as $observer){
                        $observer->update();
                }
        }

}


/**
        观察者要实现的接口
*/

interface Observerable
{
        public function update();
}

/**
    定义观察者类
*/
class Subscriber implements Observerable
{
        //观察者需要执行的操作
        public function update()
        {
                echo "Callback".PHP_EOL;
        }
}

$paper = new Paper();
$paper->register(new Subscriber());
// $paper->register(new Subscriber1());
$paper->trigger();

总结:

    当需要新增观察者角色对象时,只需要在主题中进行注册,然后具体实现逻辑直接在新观察者中进行。从而达到降低对象耦合度目的。

转载请注明:微刻 blog.wecot.cn » 设计模式之观察者模式

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址