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

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

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

包含以下角色:

  • Mediator: 抽象中介者

  • ConcreteMediator: 具体中介者

  • Colleague: 抽象同事类

  • ConcreteColleague: 具体同事类

示例

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

图示

代码如下:

/**
 * 抽象机长
 */
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;
        }
    }
}

具体机长:

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");
    }
}

内部包含塔台;

多个类

其余两个类也是如此;

测试类如下:

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();
    }
}

运行结果如下:

运行截图

相关推荐

  1. 行为设计模式中介模式

    2024-01-17 16:58:03       57 阅读
  2. 设计模式(023)行为中介模式

    2024-01-17 16:58:03       26 阅读
  3. 设计模式行为设计模式——中介模式

    2024-01-17 16:58:03       44 阅读
  4. 设计模式行为模式中介模式

    2024-01-17 16:58:03       46 阅读
  5. 设计模式(十二):中介模式行为模式

    2024-01-17 16:58:03       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-17 16:58:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-17 16:58:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-17 16:58:03       82 阅读
  4. Python语言-面向对象

    2024-01-17 16:58:03       91 阅读

热门阅读

  1. 240115问题解决:杀掉for循环进程

    2024-01-17 16:58:03       54 阅读
  2. zsh插件之gitignore安装使用教程

    2024-01-17 16:58:03       57 阅读
  3. 利用C++进行图像处理与计算机视觉

    2024-01-17 16:58:03       50 阅读
  4. MongoDB聚合:$changeStreamSplitLargeEvent

    2024-01-17 16:58:03       55 阅读
  5. 240112问题记录:/usr/bin/sh: 1: source: not found

    2024-01-17 16:58:03       50 阅读
  6. git基础

    git基础

    2024-01-17 16:58:03      44 阅读
  7. stable-diffusion-webui的逐步部署教程

    2024-01-17 16:58:03       56 阅读
  8. Http三种常见状态码的区别(401、403、500)

    2024-01-17 16:58:03       49 阅读
  9. Qt之QxOrm

    2024-01-17 16:58:03       53 阅读
  10. Python装饰器

    2024-01-17 16:58:03       58 阅读