zoukankan      html  css  js  c++  java
  • PHP实现观察者模式

    “观察者模式”的观察者三个字信息量很大。玩过很多网络游戏的童鞋们应该知道,即便是斗地主,除了玩家,还有一个角色叫“观察者"。在我们今天他谈论的模式设计中,观察者也是如此。首先,要有一个“主题”。只有有了一个主题,观察者才能搬着小板凳儿聚在一堆。其次,观察者还必须要有自己的操作。否则你聚在一堆儿没事做也没什么意义。

       从面向过程的角度来看,首先是观察者向主题注册,注册完之后,主题再通知观察者做出相应的操作,整个事情就完了。

       从面向对象的角度来看,主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低。

             如何实现观察者注册?通过前面的注册者模式很容易给我们提供思路,把这些对象加到一棵注册树上就好了嘛。如何通知?这就更简单了,对注册树进行遍历,让每个对象实现其接口提供的操作

    <?php
    // 主题接口
    interface Subject{
        public function register(Observer $observer);
        public function notify();
    }
    // 观察者接口
    interface Observer{
        public function watch();
    }
    // 主题
    class Action implements Subject{
         public $_observers=array();
         public function register(Observer $observer){
             $this->_observers[]=$observer;
         }
    
         public function notify(){
             foreach ($this->_observers as $observer) {
                 $observer->watch();
             }
    
         }
     }
    
    // 观察者
    class Cat implements Observer{
         public function watch(){
             echo "Cat watches TV<hr/>";
         }
     } 
     class Dog implements Observer{
         public function watch(){
             echo "Dog watches TV<hr/>";
         }
     } 
     class People implements Observer{
         public function watch(){
             echo "People watches TV<hr/>";
         }
     }
    
    
    
    // 应用实例
    $action=new Action();
    $action->register(new Cat());
    $action->register(new People());
    $action->register(new Dog());
    $action->notify();
    

      

  • 相关阅读:
    面向对象的JavaScript-009-闭包
    面向对象的JavaScript-007-Function.prototype.bind() 的4种作用
    面向对象的JavaScript-006-Function.prototype.apply()的3种作用
    面向对象的JavaScript-005-Function.prototype.call()的3种作用
    面向对象的JavaScript-004
    面向对象的JavaScript-003
    面向对象的JavaScript-002
    面向对象的JavaScript-001
    IOC容器特性注入第一篇:程序集反射查找
    AWS EC2 在WINDOWS平台使用FSX
  • 原文地址:https://www.cnblogs.com/zh718594493/p/12094160.html
Copyright © 2011-2022 走看看