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

    观察者模式是非常有用的设计模式,事件机制,发布订阅等都是基于观察者模式实现的。
    观察者模式顾名思义要有“观察者”和“被观察者”,为了约束两者的行为,又需要各自的接口(Interface)。我们来实现一个Demo:

    ObserverInterface.php

    <?php
    
    /**
     * Interface ObserverInterface 观察者接口
     */
    interface ObserverInterface
    {
        /**
         * 收到主题通知后执行相应的反馈
         * @return mixed
         */
        public function response();
    }
    

    ObserverA.php

    <?php
    require_once 'ObserverInterface.php';
    
    /**
     * Class ObserverA 第一种观察者
     */
    class ObserverA implements ObserverInterface
    {
        public function response()
        {
            echo '观察者A已收到' . PHP_EOL;
        }
    }
    

    ObserverB.php

    <?php
    
    /**
     * Class ObserverB 第二种观察者
     */
    class ObserverB implements ObserverInterface
    {
        public function response()
        {
            echo 'Observer B has received the notify' . PHP_EOL;
        }
    
        public function ohter()
        {
            echo '该种观察者独有的方法';
        }
    }
    

    SubjectInterface.php

    <?php
    
    /**
     * Interface SubjectInterface 主题接口
     */
    interface SubjectInterface
    {
        /**
         * @param ObserverInterface $observer
         */
        public function add(ObserverInterface $observer);
    
        /**
         * 通知观察者
         */
        public function notify();
    }
    

    Subject.php

    <?php
    require_once 'SubjectInterface.php';
    
    /**
     * Class Subject 被观察的对象
     */
    class Subject implements SubjectInterface
    {
        /**
         * @var $observers Observer
         */
        private $observers;
    
        /**
         * @param ObserverInterface $observer 注册观察者实体
         */
        public function add(ObserverInterface $observer)
        {
            $this->observers[] = $observer;
        }
    
        /**
         * 发送通知
         */
        public function notify()
        {
            // 逐个通知观察者
            foreach ($this->observers as $observer) {
                $observer->response();
            }
        }
    }
    

    下面我们来模拟一下场景

    <?php
    require_once 'Subject.php';
    require_once 'ObserverA.php';
    require_once 'ObserverB.php';
    //观察者模式
    
    $Subject = new Subject();
    $Subject->add(new ObserverA());
    $Subject->add(new ObserverB());
    $Subject->notify();
    

    执行结果:

    观察者A已收到
    Observer B has received the notify
    
  • 相关阅读:
    Java 零基础跑起第一个程序
    Xcode6 引入第三方静态库project的方法
    Cocos2d-x3.0 RenderTexture(三)
    POJ 题目3461 Oulipo(KMP)
    unity3D游戏开发实战原创视频讲座系列9之塔防类游戏开发第一季
    android 虚拟按键是通过哪种机制上报的?
    深入理解 C 指针阅读笔记 -- 第五章
    【1】按照Django官网,编写一个web app 创建project/配置数据库
    [Swift]LeetCode442. 数组中重复的数据 | Find All Duplicates in an Array
    [Swift]LeetCode441. 排列硬币 | Arranging Coins
  • 原文地址:https://www.cnblogs.com/shaoyikai/p/13539976.html
Copyright © 2011-2022 走看看