美文网首页
观察者模式

观察者模式

作者: 散装咖啡 | 来源:发表于2017-05-29 13:05 被阅读2次
/**
observer模式
       定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所
有依赖于它的对象都得到通知并自动刷新能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能插件系统
*/
//主角
    class Observerable
    {
        private $_observers = array();
        
        public function registerObserver($observer)
        {
            $this->_observers[] =$observer;
        }
        
        public function removeObserver($observer)
        {
            $key = array_search($observer,$this->_observers);
            
            if (!($key===false)) {
                unset($this->_observers[$key]);
            }
        }
        
        public function notifyObservers() {
            foreach ($this->_observers as $observer) {
                if($observer instanceof Observer) {
                    $observer->update($this);
                }
            }
        }
    }
    
    interface Observer
    {
        public function update($observer);
    }
    
    interface DisplayElement
    {
        public function display();
    }
    
    // -- 实例类定义
    class NewsObserverable extends Observerable//具体主角
    {
        private $_sports_news;
        
        public function setSportsNews($data)
        {
            $this->_sports_news = $data;
            $this->notifyObservers();
        }
        
        public function getSportsNews()
        {
            return $this->_sports_news;
        }
        
        private $_local_news;
        
        public function setLocalNews($data)
        {
            $this->_local_news =$data;
            $this->notifyObservers();
        }
        
        public function getLocalNews()
        {
            return $this->_local_news;
        }
    }
    
    class SportsNews implements Observer,DisplayElement
    {
        private $_data = null;
        
        public function update($observer)
        {
            if ($this->_data !=$observer->getSportsNews()) {
                $this->_data =$observer->getSportsNews();
                $this->display();
            }
        }
        
        public function display()
        {
            echo $this->_data . date("Y-m-d H:i:s")."<br/>";
        }
    }

    class LocalNews implements Observer,DisplayElement
    {
        private $_data = null;
        public function update($observer)
        {
            if ($this->_data !=$observer->getLocalNews()) {
                $this->_data =$observer->getLocalNews();
                $this->display();
            }
        }
        
        public function display()
        {
            echo$this->_data.date("Y-m-d H:i:s")."<br/>";
        }
    }
    
// -- 实例化 ---
$objObserver = new NewsObserverable();

$local = new LocalNews();
$sports = new SportsNews();

$objObserver->registerObserver($local);
$objObserver->registerObserver($sports);

$objObserver->setSportsNews("sports news 1 ");
$objObserver->setSportsNews("sports news 2 ");

$objObserver->setLocalNews("local news 1 ");
$objObserver->setLocalNews("local news 2 ");
$objObserver->setLocalNews("local news 3 ");

$objObserver->removeObserver($sports);
$objObserver->removeObserver($local);

参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/mmbkfxtx.html