• 设计模式:中介者模式


    中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一组对象之间的交互,来减少对象之间的直接耦合。中介者模式通过引入一个中介者对象,将对象之间的通信转化为与中介者的交互,从而降低了对象之间的依赖关系。
    在中介者模式中,对象之间的通信通过中介者进行,而不是直接相互调用。中介者对象负责协调和控制对象之间的交互,它封装了对象之间的通信逻辑,使得对象之间的关系更加松散。

    组件

    中介者模式通常包括以下组件:

    1. 抽象中介者(Abstract Mediator):定义了中介者对象的接口,用于协调和控制对象之间的交互。
    2. 具体中介者(Concrete Mediator):实现了抽象中介者接口,负责协调和控制对象之间的交互。它通常持有一组对象的引用,并根据对象之间的交互进行逻辑处理。
    3. 同事类(Colleague):每个同事类都知道中介者对象,并通过中介者对象来与其他同事类进行交互。同事类之间的通信通过中介者来进行,而不是直接相互调用。

    中介者模式可以简化对象之间的通信,减少了对象之间的直接耦合。它将对象之间的交互逻辑集中在中介者对象中,使得系统更加灵活和可维护。中介者模式常用于复杂的对象交互场景,如图形界面、多人游戏等。

    代码示例

    import java.util.ArrayList;
    import java.util.List;
     // 抽象中介者
    interface Mediator {
        void sendMessage(String message, Colleague colleague);
    }
     // 具体中介者
    class ConcreteMediator implements Mediator {
        private List<Colleague> colleagues;
         public ConcreteMediator() {
            colleagues = new ArrayList<>();
        }
         public void addColleague(Colleague colleague) {
            colleagues.add(colleague);
        }
         public void sendMessage(String message, Colleague colleague) {
            for (Colleague c : colleagues) {
                if (c != colleague) {
                    c.receiveMessage(message);
                }
            }
        }
    }
     // 同事类
    abstract class Colleague {
        protected Mediator mediator;
         public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
         public abstract void send(String message);
         public abstract void receiveMessage(String message);
    }
     // 具体同事类
    class ConcreteColleague extends Colleague {
        public ConcreteColleague(Mediator mediator) {
            super(mediator);
        }
         public void send(String message) {
            System.out.println("发送消息:" + message);
            mediator.sendMessage(message, this);
        }
         public void receiveMessage(String message) {
            System.out.println("收到消息:" + message);
        }
    }
     // 客户端代码
    public class Main {
        public static void main(String[] args) {
            ConcreteMediator mediator = new ConcreteMediator();
             Colleague colleague1 = new ConcreteColleague(mediator);
            Colleague colleague2 = new ConcreteColleague(mediator);
             mediator.addColleague(colleague1);
            mediator.addColleague(colleague2);
             colleague1.send("Hello, colleague2!");
            colleague2.send("Hi, colleague1!");
        }
    }
    
    • 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

    在上述示例中,我们定义了抽象中介者(Mediator)接口和具体中介者(ConcreteMediator)类。同事类(Colleague)是中介者模式中的参与者,其中具体同事类(ConcreteColleague)实现了抽象同事类的方法。客户端代码创建了中介者对象和同事对象,并将同事对象添加到中介者中。同事对象通过中介者对象进行消息的发送和接收。

    这个示例展示了如何使用Java实现中介者模式,通过中介者对象来协调和控制对象之间的交互。中介者模式可以减少对象之间的直接耦合,使系统更加灵活和可扩展。

    源码中的使用

    在源码中,中介者模式有很多应用。以下是一些常见的源码中使用中介者模式的情况:

    1. Java AWT和Swing中的事件处理:在GUI应用程序中,中介者模式被广泛用于处理组件之间的事件和通信。通过使用中介者模式,各个组件之间的交互可以通过中介者进行协调和处理。
    2. Spring框架中的消息中间件:Spring的消息中间件模块(如Spring Integration)使用中介者模式来实现不同组件之间的消息传递和通信。通过中介者,各个组件可以解耦并通过消息进行通信。
    3. 航空管制系统:航空管制系统中的飞机、雷达、调度员等参与者之间的通信可以使用中介者模式。中介者作为调度员,负责协调和处理各个参与者之间的通信和决策。
    4. 聊天室应用程序:聊天室应用程序中的用户之间的通信可以通过中介者模式来实现。中介者作为聊天室的服务器,负责接收和转发用户之间的消息。
      中介者模式在源码中的应用非常广泛,它可以用于各种需要协调和控制多个对象之间交互的场景。通过中介者模式,可以减少对象之间的直接依赖,提高系统的灵活性和可维护性。

    优缺点

    优点:

    1. 解耦对象之间的关系:中介者模式将对象之间的交互行为集中在中介者对象中,使得对象之间的关系变得松散,减少了对象之间的直接依赖。
    2. 减少了类之间的耦合度:通过引入中介者对象,各个对象只需要与中介者进行通信,而不需要直接与其他对象进行通信,降低了类之间的耦合度。
    3. 简化了对象的交互:中介者模式将对象之间的交互行为封装在中介者中,使得对象只需要关注自身的逻辑,而不需要了解其他对象的细节。
    4. 可以集中管理和控制对象之间的交互:中介者作为协调者,可以集中管理和控制对象之间的交互行为,提供更灵活和可控的系统设计。
      缺点:
    5. 中介者对象的复杂性:中介者对象需要处理各个对象之间的交互逻辑,可能会变得复杂,导致中介者对象本身变得庞大和难以维护。
    6. 增加了系统的单点故障:中介者对象承担了集中管理和控制对象之间交互的责任,一旦中介者对象出现问题,整个系统的稳定性可能会受到影响。
    7. 可能导致性能问题:由于中介者模式集中了对象之间的交互行为,可能会导致中介者成为系统的瓶颈,影响系统的性能。

    总结:

    中介者模式通过引入中介者对象来解耦对象之间的关系,简化了对象的交互,提供了更灵活和可控的系统设计。然而,中介者对象的复杂性和系统的单点故障可能会带来一些问题。在使用中介者模式时,需要权衡其优缺点,确保合理使用。

  • 相关阅读:
    PyTorch 1.13 正式发布:CUDA 升级、集成多个库、M1 芯片支持
    Java之反射相关知识补充
    springboot项目实现helloworld
    iOS——KVO底层学习
    ASL和二叉排序树
    kubernetesr进阶--污点和容忍之基于污点的驱逐
    Python | Leetcode Python题解之第200题岛屿数量
    【自动化测试】第一次项目实施
    gin——使用腾讯云存储图片
    Go单体服务开发最佳实践
  • 原文地址:https://blog.csdn.net/qq_27586963/article/details/132945802