美文网首页
设计模式(十八):中介者模式

设计模式(十八):中介者模式

作者: 骑着母猪砍大象 | 来源:发表于2018-12-17 23:09 被阅读6次

转载请注明作者和出处https://www.jianshu.com/p/6678cf892a5d

运行平台: Windows

php版本: php7.0

作者简介: 一个本该成为游戏职业选手却被编程耽误的程序员


何为中介模式,就好像我们现在打电话,他有一个电话,我有一个电话,我们之间一条线就可以互相通电话,但是多了两个人,四个人,也就是说我们四个人需要6条电话线,随着人数的增多,这样的成本实在是太高了,于是我们就有了一个交换机(中介者),每次有新电话时候,只需要增加一条电话线去交换机便可,这就是中介者模式,增加一个中介者来过渡。
两个类之间不要相互调用,最好增加第三者类来进行调用,这样增加灵活性。

角色

  • Mediator:抽象中介者角色,一般以抽象类的方式实现。
  • ConcreteMediator:具体中介者角色,继承于抽象中介者,实现了父类定义的方法。
  • Colleague:抽象同事类角色,定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。
//抽象电话类
abstract class Colleague{
protected $mediator;

    abstract public function sendMsg($num,$msg);
    abstract public function receiveMsg($msg);
    //注册中介者
    final public function setMediator(Mediator $mediator){
        $this->mediator = $mediator;
    }
}

//手机
class Phone extends Colleague{
    public function sendMsg($num, $msg)
    {
        echo '打电话,嘟嘟嘟·····';
        $this->mediator->opreation($num,$msg);
    }
    public function receiveMsg($msg)
    {
        echo "接电话,!!!!!!!!!!!".$msg;
    }
}

//座机
class Telephone extends Colleague{
    public function sendMsg($num, $msg)
    {
        echo '打电话,嘟嘟嘟·····';
        $this->mediator->opreation($num,$msg);
    }
    public function receiveMsg($msg)
    {
        echo "彩铃,接电话,!!!!!!!!!!!".$msg;
    }
}

//抽象类中介者
abstract class Mediator{
    abstract public function opreation($id,$message);
    abstract public function register($id,Colleague $colleague);
}

//交换级
class switches extends Mediator{
    protected $colleagues = array();
    public function opreation($id, $message)
    {
        if(!isset($this->colleagues[$id])){
            echo "未注册手机号";
        }
        $this->colleagues[$id]->receiveMsg($id,$message);
    }

    public function register($id, Colleague $colleague)
    {
        if(!in_array($colleague,$this->colleagues)){
            $this->colleagues[$id] = $colleague;
        }
        $colleague->setMediator($this);
    }
}

$switches = new switches();//交换鸡
$telephone = new Telephone();//电话
$phone = new Phone();//手机

$switches->register(13537545111,$telephone);//注册手机号码

$switches->register(2144575,$phone);//注册电话号码号码
//通话
$phone->sendMsg(13537545111,'hello world');
$telephone->sendMsg(2144575,'请说普通话');
$telephone->sendMsg(2144575,'请说普通话');

相关文章

网友评论

      本文标题:设计模式(十八):中介者模式

      本文链接:https://www.haomeiwen.com/subject/qrthkqtx.html