zoukankan      html  css  js  c++  java
  • 据说是中介者模式--这样的相互反复调用算个求的好代码

    <?php
    /**
     * 中介者模式
     *
     * 用一个中介对象来封装一系列的对象交互
     * 使各对象不需要显式地相互引用从而使其耦合松散
     * 而且可以独立地改变它们之间的交互
     */
    
    abstract class Mediator
    {
        abstract public function send($message,$colleague);
    }
    
    abstract class Colleague
    {
        private $_mediator = null;
        public function __construct($mediator)
        {
            $this->_mediator = $mediator;
        }
        public function send($message)
        {
            $this->_mediator->send($message,$this);
        }
        abstract public function notify($message);
    }
    
    //新建对象,并把它作为参数给Colleague1或者Colleague2
    //所以Colleague1或者Colleague2就有了除本身外的,还有这里的方法
    //还有继承于Mediator方法,还有它本身继承于Colleague的方法
    class ConcreteMediator extends Mediator
    {
        private $_colleague1 = null;
        private $_colleague2 = null;
        //
        public function send($message,$colleague)
        {
            if($colleague == $this->_colleague1)
            {
                $this->_colleague1->notify($message);
            }
            else
            {
                $this->_colleague2->notify($message);
            }
        }
        //给它的参数赋一个对象
        public function set($colleague1,$colleague2)
        {
            $this->_colleague1 = $colleague1;
            $this->_colleague2 = $colleague2;
        }
    }
    
    class Colleague1 extends Colleague
    {
        public function notify($message)
        {
            echo "Colleague1 Message is :".$message."<br/>";
        }
    }
    
    class Colleague2 extends Colleague
    {
        public function notify($message)
        {
            echo "Colleague2 Message is :".$message."<br/>";
        }
    }
    
    //
    $objMediator = new ConcreteMediator();
    $objC1 = new Colleague1($objMediator);
    $objC2 = new Colleague2($objMediator);
    $objMediator->set($objC1,$objC2);
    $objC1->send("to c2 from c1");
    $objC2->send("to c1 from c2");
  • 相关阅读:
    Visual Detection of Lintel-Occluded Doors from a Single Image
    Linux下快速构建Android编译环境
    How to Train YOLOv4 on a Custom Dataset
    yolo v4 darknet colab
    Deep Image Matting
    给 MSYS2 添加中科大的源
    msys2 mingw64 ffmpeg 搭建最新ffmpeg编译环境 可用 ffmpeg 4.1 及更新版本
    GB28181对接摄像机/NVR视频流
    video.js在iframe中如何解决无法自动播放问题
    LiveGBS-摄像机网页低延时无插件直播实现
  • 原文地址:https://www.cnblogs.com/jiufen/p/5007523.html
Copyright © 2011-2022 走看看