23种设计模式,中介者模式的概念优缺点以及JAVA代码举例

简介: 【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式(Mediator Pattern)

中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

概念

  • 中介者(Mediator):定义一个接口用于与各同事(Colleague)对象通信。
  • 具体中介者(Concrete Mediator):实现中介者的接口,并协调同事对象之间的交互关系。
  • 同事类(Colleague):与其他同事对象通信时,只与中介者对象交互,而不是直接与其他同事类交互。

优点

  1. 减少类间的依赖关系:将多个类之间的通信封装到一个类中,多个类相互之间的关系变得更加简单。
  2. 集中控制交互:集中控制交互复杂性,中介者负责协调各同事之间的交互,使各同事类更易于管理和维护。
  3. 提高可复用性:将对象的行为方式封装在它们的互动中,从而使得它们更容易被独立地复用。

缺点

  1. 中介者可能过于复杂:如果设计不当,中介者对象本身变得过于复杂,这反而会使整个系统更难理解和维护。
  2. 过度集中化:随着逻辑的增加,中介者可能演变成一个巨大的类,集中过多的责任,使得系统扩展和维护复杂化。

Java代码示例

假设我们有一个简单的聊天室,其中的用户互相发送消息,使用中介者模式来简化用户之间的通信。

java复制代码

// 中介者接口
interface Mediator {
    void send(String message, Colleague colleague);
}

// 具体中介者
class ChatMediator implements Mediator {
    private List<Colleague> colleagues;

    public ChatMediator() {
        this.colleagues = new ArrayList<>();
    }

    public void addColleague(Colleague colleague) {
        colleagues.add(colleague);
    }

    @Override
    public void send(String message, Colleague colleague) {
        for (Colleague c : colleagues) {
            // Don't tell the user about their own message
            if (c != colleague) {
                c.receive(message);
            }
        }
    }
}

// 同事抽象类
abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void send(String message);
    public abstract void receive(String message);
}

// 具体同事类
class User extends Colleague {
    public User(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("User Sending: " + message);
        mediator.send(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println("User Received: " + message);
    }
}

// 客户端代码
public class MediatorDemo {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatMediator();
        User user1 = new User(mediator);
        User user2 = new User(mediator);
        mediator.addColleague(user1);
        mediator.addColleague(user2);

        user1.send("Hi there!");
        user2.send("Hello!");
    }
}

在这个例子中,ChatMediator 作为中介者,负责传递消息。每个 User 实例是一个同事类,它们通过中介者与其他用户通信。这样,用户之间不直接相互通信,而是通过中介者来进行,这样可以很容易地添加更多的用户或修改通信逻辑。

相关文章
|
5天前
|
缓存 Java 开发者
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
29 11
|
1月前
|
存储 Java 程序员
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
|
21天前
|
Java 数据安全/隐私保护
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
50 4
|
2月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
69 1
|
3月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
72 0
[Java]23种设计模式
|
2月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
19天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
80 17
|
30天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者