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

2019-05-20  本文已影响0人  何笙

用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使耦合松散,而且可以独立的改变他们之间的交互.

角色

image.png

使用场景:

1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

优点

缺点

示例代码

抽象中介者

 abstract class Mediator {
        //定义同事类
        private $colleagueA;
        private $colleagueB;
        
        public function setColleagueA(Colleague $colleagueA) {
            $this->colleagueA = $colleagueA;
        }
        public function setColleagueB(Colleague $colleagueB) {
            $this->colleagueB = $colleagueB;
        }
        public abstract function doSomething1();
        public abstract function doSomething2();
 }

具体中介者

class ConcreteMediator extends Mediator{

    public function doSomething1() {
        //调用同事类的方法
        $this->colleagueA->selfMethod1();
        $this->colleagueB->selfMethod2();
    }

    public function doSomething2() {
        $this->colleagueA->selfMethod2();
        $this->colleagueB->selfMethod1();
    }

}

抽象同事类

abstract class Colleague {
    protected $mediator;
    public function __construct(Mediator $mediator) {
        $this->mediator = $mediator;
    }
}

具体同事类

class ConcreteColleague  extends Colleague {
    //自有方法
    public function selfMethod(): void {
        //处理自己能处理的逻辑
    }
    //依赖方法
    public function depMethod1() {
        //处理自己能处理的逻辑
        //自己不能处理的业务逻辑,委托给中介者
        $this->mediator->doSomething1();
    }
上一篇下一篇

猜你喜欢

热点阅读