• 中介者模式:简化对象间的通信


    在软件设计中,当一个系统中的对象相互高度依赖,且通信关系错综复杂时,理解和维护这样的系统将变得非常困难。中介者模式(Mediator Pattern)提供了一种解决方案,它通过定义一个中介者对象来封装一系列对象之间的交互,从而降低系统的耦合度,使得对象之间的关系更加清晰。

    中介者模式的结构

    中介者模式包含以下主要角色:

    1. 中介者(Mediator):定义一个中介者接口,用于封装同事对象之间的交互。
    2. 具体中介者(Concrete Mediator):实现中介者接口,具体封装同事对象之间的交互逻辑。
    3. 同事对象(Colleague):系统中的各个对象,它们知道中介者对象,并通过中介者与其他同事对象通信。

    中介者模式的实现

    以下是一个简单的Java实现示例:

    // 抽象中介者接口
    interface Mediator {
        void register(Colleague colleague);
        void relay(Colleague colleague);
    }
    
    // 具体中介者实现
    class ConcreteMediator implements Mediator {
        private List<Colleague> colleagues = new ArrayList<>();
    
        @Override
        public void register(Colleague colleague) {
            colleagues.add(colleague);
        }
    
        @Override
        public void relay(Colleague colleague) {
            for (Colleague c : colleagues) {
                if (c != colleague) {
                    c.notify();
                }
            }
        }
    }
    
    // 抽象同事类
    abstract class Colleague {
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
    
        public abstract void notify();
        public abstract void receive(String message);
    }
    
    // 具体同事类A
    class ConcreteColleagueA extends Colleague {
        public ConcreteColleagueA(Mediator mediator) {
            super(mediator);
            mediator.register(this);
        }
    
        @Override
        public void notify() {
            // 处理接收到的消息
        }
    
        @Override
        public void receive(String message) {
            System.out.println("Colleague A received message: " + message);
        }
    }
    
    // 具体同事类B
    class ConcreteColleagueB extends Colleague {
        public ConcreteColleagueB(Mediator mediator) {
            super(mediator);
            mediator.register(this);
        }
    
        @Override
        public void notify() {
            // 处理接收到的消息
        }
    
        @Override
        public void receive(String message) {
            System.out.println("Colleague B received message: " + message);
        }
    }
    
    // 客户端代码
    public class Client {
        public static void main(String[] args) {
            Mediator mediator = new ConcreteMediator();
            Colleague colleagueA = new ConcreteColleagueA(mediator);
            Colleague colleagueB = new ConcreteColleagueB(mediator);
    
            // 模拟发送消息
            colleagueA.receive("Hello from A");
            colleagueB.receive("Hello from B");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    在这个例子中,我们定义了一个中介者接口Mediator和具体中介者实现ConcreteMediator,它负责注册同事对象并转发消息。Colleague是抽象同事类,定义了同事对象的接口,具体同事类如ConcreteColleagueAConcreteColleagueB实现了这些接口,并定义了如何接收和响应消息。

    中介者模式的应用场景

    • 对象间的通信过于复杂:当系统中对象之间的通信关系错综复杂时,使用中介者模式可以简化这些关系。
    • 需要一个统一的通信中心:当系统中的对象需要通过一个中心节点进行通信时,中介者模式可以提供这样的中心节点。

    中介者模式的优点

    • 降低耦合度:通过中介者对象,减少了对象之间的直接依赖,降低了系统的耦合度。
    • 提高可维护性:对象之间的交互逻辑被集中管理,提高了系统的可维护性。
    • 易于扩展:添加新的同事对象变得更加容易,只需实现Colleague接口即可。

    结论

    中介者模式是一种有效的软件设计模式,它通过引入中介者对象来简化复杂的对象通信关系。这种模式提高了系统的模块化和可维护性,使得对象之间的关系更加清晰。在实际开发中,中介者模式常用于构建具有多个交互组件的大型系统。掌握中介者模式,可以帮助开发者更好地设计和实现复杂的通信逻辑。

  • 相关阅读:
    ChatGPT:革命性的自然语言处理技术
    构建用于签名/加密双证书测试体系的可执行命令
    力扣刷题学习SQL篇——1-1 选择(大的国家——union和union all 和or)
    IDEA快捷键记录
    基于springboot的社区疫情管理系统源码
    【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过PDO跑循环同步位置模式详解
    数字化安全方案建设
    多线程笔记
    Scala编程基础——集合&高阶函数
    【JAVA后端开发】Part2--瑞吉外卖项目(员工管理)
  • 原文地址:https://blog.csdn.net/aaxzz/article/details/138115437