标签 中介模式 下的文章

中介模式,是非常非常常见的一种设计模式。一般应用于一组对象以定义良好但是复杂的方式进行通信的场合。定制一个分布在多个类中的行为,而不像生成太多的子类。这是中介模式的应用场景。
中介模式的优点:中介类的集中化控制。
中介模式的缺点:中介类的集中化控制。
中介模式的中介类,集中化控制了所有的对象,减少了请求者和响应者的耦合。把中介封装在一个对象中,注意力从关注对象本身变成了关注它们之间的交互,更加宏观。缺点也就显而易见,因为集中化的控制,使得中介类越发的庞大,不易维护。
场景:中介抽象类联合国,中介具体类安理会。成员抽象类为国家,成员具体类为美国和伊拉克。以PHP为代码环境来描述中介模式。

<?php
<?php
abstract class UN{
    public function sentMessage($message, $countryObj){}
}
abstract class Country{
    protected $UNObj;
    public function __construct($UNObj){
        $this->UNObj = $UNObj;
    }
}
class US extends Country{
    public function __construct($UNObj){
        parent::__construct($UNObj);
    }
    public function sentMessage($message){
        $this->UNObj->sentMessage($message, $this);
    }
    public function getMessage($message){
        echo '美国收到某国消息:' . $message . '<br>';
    }
}
class Iraq extends Country{
    public function __construct($UNObj){
        parent::__construct($UNObj);
    }
    public function sentMessage($message){
        $this->UNObj->sentMessage($message, $this);
    }
    public function getMessage($message){
        echo '伊拉克收到某国消息:' . $message . '<br>';
    }
}
class UNSC extends UN{
    private $usObj;
    private $iraqObj;
    public function setUsObj($obj){
        $this->usObj = $obj;
    }
    public function setIraqObj($obj){
        $this->iraqObj = $obj;
    }
    public function sentMessage($message, $sentObj){
        if($this->usObj == $sentObj){
            $this->iraqObj->getMessage($message);
        }else{
            $this->usObj->getMessage($message);
        }
    }
}
//客户端/接口
$unsc = new UNSC();
$us = new US($unsc);
$iraq = new Iraq($unsc);
$unsc ->setUsObj($us);
$unsc->setIraqObj($iraq);
$us->sentMessage('你们不可以研发核武器!');
$iraq->sentMessage('我们没有和武器!');