• 据说是中介者模式--这样的相互反复调用算个求的好代码


    <?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");
  • 相关阅读:
    OCP-1Z0-052-V9.02-177题
    游戏服务端IOCP模型,自己封装的一个类,3行代码搞定服务端。
    OCP-1Z0-052-V9.02-116题
    OCP-1Z0-052-V9.02-72题
    map按value值查找——find_if的使用
    Oracle OCP 11G 052答案解析目录
    Oracle OCP 11G 052 V8.02与V9.02版本对比
    OCP-1Z0-052-V8.02-102题
    OCP-1Z0-052-V8.02-117题
    在完成端口IOCP模型判断客户端是否已关闭连接(掉线)
  • 原文地址:https://www.cnblogs.com/jiufen/p/5007523.html
Copyright © 2020-2023  润新知