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");
  • 相关阅读:
    Spring学习(二) AOP 面向切面编程之概念(一)
    Spring学习(一) IOC容器学习
    多线程和同步分别有几种实现方法?
    如何理解"=="和equals方法
    &和&&的区别
    关于静态方法和非静态方法之间的调用
    缘来了,来园了
    Java设计模式-代理模式
    JavaBitSet学习
    kafka安装
  • 原文地址:https://www.cnblogs.com/jiufen/p/5007523.html
Copyright © 2011-2022 走看看