观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
观察者模式实现了低耦合,非侵入式的通知与更新机制

<?php
//观察者接口类
namespace Lib;

interface Observer{
    function update();
}
<?php
//事件产生类
namespace Lib;

class Subject
{
    private $observers;

    public function attach(\Lib\Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function notify()
    {
        if($this->observers)
        {
            foreach ($this->observers as $k=>$v)
            {
                $v->update();
            }
        }

    }
}
<?php
//事件
namespace Test;

class Event extends \Lib\Subject
{
    public function trigger()
    {
        echo "做了一堆动作,引来某些人";
        $this->notify();
    }
}
<?php
//观察者1
namespace Test;

class Observer1 implements \Lib\Observer
{
    public function update()
    {
        echo '观察者1';
    }
}
<?php
//观察者2
namespace Test;

class Observer2 implements \Lib\Observer
{
    public function update()
    {
        echo '观察者2';
    }
}
$event = new \Test\Event();

$event->attach(new \Test\observer1());
$event->attach(new \Test\observer2());

$event->trigger();

results matching ""

    No results matching ""

    results matching ""

      No results matching ""