中介者模式

/**
        mediator模式
        用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用
从而使其耦合松散,而且可以独立地改变它们之间的交互
*/
    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);
    }

    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//房东1
    {
        public function notify($message)
        {
            echo"Colleague1 Message is :".$message."
"; } } class Colleague2 extends Colleague//房东2 { public function notify($message) { echo"Colleague2 Message is :" . $message . "
"; } } $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");

参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

你可能感兴趣的:(中介者模式)