php设计模式之观察者模式

观察者模式以前一直不懂,现在有时间从网上搞了一发,自己写了一遍

<?php

/**
 * 继承PhP的spl接口实现被观察的对象
 * Class MyObject
 */
class MyObject implements SplSubject
{
    //定义观察者的集合
    public $observers;

    //定义被观察的属性
    public $name;

    /**
     * 用Spl的objectStorage进行操作
     * MyObject constructor.
     */
    public function __construct($name)
    {
        $this->observers = new SplObjectStorage();
        $this->name = $name;
    }

    /**
     * 增加观察者
     * @param SplObserver $observer 观察者对象
     */
    public function attach(SplObserver $observer)
    {
       $this->observers->attach($observer);
    }

    /**
     * 减少观察者
     * @param SplObserver $observer 观察者对象
     */
    public function detach(SplObserver $observer)
    {
        $this->observers->detach($observer);
    }

    /**
     * 进行更改通知,通知观察者的对象发生改变
     */
    public function notify()
    {
        // TODO: Implement notify() method.

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

    /**
     * 获取名称
     */
    public function getName()
    {
        return $this->name;
    }


}

/**
 * 观察者的类别,继承splObserver
 * Class MyObserver
 */
class MyObserver implements SplObserver
{
    public function update(SplSubject $subject)
    {
        echo $subject->getName().PHP_EOL;
    }
}

$observer1 = new MyObserver();
$observer2 = new MyObserver();
$subject = new MyObject('哈哈哈哈');
$subject->attach($observer1);
$subject->attach($observer2);
$subject->notify();

 

posted @ 2017-12-11 13:03  matengfei  阅读(131)  评论(0编辑  收藏  举报