设计模式—行为型模式之中介者模式

设计模式---行为型模式之中介者模式

中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。

包含以下角色:

  • Mediator: 抽象中介者

  • ConcreteMediator: 具体中介者

  • Colleague: 抽象同事类

  • ConcreteColleague: 具体同事类

示例

如下图所示,如果我们要几架飞机,互相联系的话,会很麻烦。如果有一个中间塔台来联系,就会方便很多。

代码如下:

java 复制代码
/**
 * 抽象机长
 */
public abstract class AbstarctCaptain {
    //起飞
    abstract void fly();
    //降落
    abstract void land();
    //完成
    abstract void success();

}
/**
 * 塔台:中介者
 *
 * 网状变为星状
 */
public class ControlTower {
    private boolean canDo = true;

    //接受请求...
    public void acceptRequest(AbstarctCaptain captain,String action){
        if("fly".equals(action)||"land".equals(action)){
            if(canDo == true){
                System.out.println("允许......");
                canDo = false;
            }else {
                System.out.println("不允许.....");
            }
        }
        if("success".equals(action)){
            canDo = true;
        }
    }
}

具体机长:

java 复制代码
public class CZ222 extends AbstarctCaptain{

    private ControlTower controlTower;
    public void setControlTower(ControlTower controlTower) {
        this.controlTower = controlTower;
    }

    @Override
    void fly() {
        System.out.println("请求起飞");
        this.controlTower.acceptRequest(this,"fly");
    }

    @Override
    void land() {
        System.out.println("请求降落");
        this.controlTower.acceptRequest(this,"land");
    }

    @Override
    void success() {
        System.out.println("成功");
        this.controlTower.acceptRequest(this,"success");
    }
}

内部包含塔台;

其余两个类也是如此;

测试类如下:

java 复制代码
public class MediatorTest {
    public static void main(String[] args) {
        ControlTower controlTower = new ControlTower();
        CZ222 cz222 = new CZ222();
        cz222.setControlTower(controlTower);
        EU111 eu111 = new EU111();
        eu111.setControlTower(controlTower);
        
        cz222.fly();
        eu111.fly();
        cz222.success();
        eu111.fly();
        eu111.success();
    }
}

运行结果如下:

相关推荐
乐观的山里娃3 分钟前
【设计模式 13】命令:覆水能收
设计模式
乐观的山里娃1 小时前
【设计模式 11】建造者:配置像天书
设计模式
看山是山_Lau21 小时前
建造者模式:复杂对象如何一步步构建
设计模式·建造者模式
霸道流氓气质1 天前
业务链路追踪日志设计模式 — 从原理到实践
设计模式
nnsix2 天前
设计模式 - 建造者模式 笔记
笔记·设计模式·建造者模式
cui17875682 天前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
百珏2 天前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
likerhood2 天前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
AI大法师2 天前
从 Adobe 焕新看品牌系统升级:Logo、主色、字体与产品体验如何重新对齐
大数据·人工智能·adobe·设计模式
贵慜_Derek2 天前
《从零实现 Agent 系统》连载 03|控制循环:感知—决策—行动—反思
人工智能·设计模式·架构