java 设计模式之中介者模式

java 设计模式之中介者模式

概要

在软件开发中,设计模式是解决常见问题的最佳实践。中介者模式(Mediator Pattern)是一种行为型设计模式,它用于减少对象之间的直接交互,通过引入一个中介者对象来协调这些对象之间的交互。这样做的好处包括降低系统的耦合度,提高系统的可扩展性和可维护性。

一、中介者模式概述

中介者模式定义了一个中介对象来封装一系列对象之间的交互,使这些对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

二、中介者模式的结构

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

  • 中介者(Mediator):定义对象间交互的接口,并持有对象集合,协调多个同事对象之间的交互。
  • 同事(Colleague):在中介者模式中,每一个同事对象都知道中介者对象,并与之通信,但不知道其他同事对象。

三、中介者模式的实现

下面是一个简单的Java示例,演示了中介者模式的应用。假设我们有一个聊天室系统,其中有多名用户,用户之间通过聊天室进行通信。
1. 定义中介者接口

public interface ChatRoom {  
    void showMessage(User user, String message);  
}

2. 实现中介者

public class ConcreteChatRoom implements ChatRoom {  
    private List<User> users = new ArrayList<>();  
  
    public void register(User user) {  
        users.add(user);  
        user.setChatRoom(this);  
    }  
  
    @Override  
    public void showMessage(User user, String message) {  
        for (User u : users) {  
            if (u != user) {  
                u.receive(user.getName(), message);  
            }  
        }  
    }  
}

3. 定义同事类

public abstract class User {  
    protected String name;  
    protected ChatRoom chatRoom;  
  
    public User(String name) {  
        this.name = name;  
    }  
  
    public void setChatRoom(ChatRoom chatRoom) {  
        this.chatRoom = chatRoom;  
    }  
  
    public abstract void receive(String sender, String message);  
  
    public void send(String message) {  
        chatRoom.showMessage(this, message);  
    }  
  
    public String getName() {  
        return name;  
    }  
}

4. 同事类的具体实现

public class ConcreteUser extends User {  
    public ConcreteUser(String name) {  
        super(name);  
    }  
  
    @Override  
    public void receive(String sender, String message) {  
        System.out.println(sender + " says: " + message);  
    }  
}

5. 客户端代码

public class Client {  
    public static void main(String[] args) {  
        ChatRoom chatRoom = new ConcreteChatRoom();  
  
        User user1 = new ConcreteUser("Alice");  
        User user2 = new ConcreteUser("Bob");  
  
        chatRoom.register(user1);  
        chatRoom.register(user2);  
  
        user1.send("Hello, Bob!");  
        user2.send("Hi, Alice. How are you?");  
    }  
}

四、中介者模式的优点与缺点

优点:

  • 降低耦合度:同事类之间不直接交互,而是通过中介者进行交互,减少了同事类之间的依赖。
  • 易于扩展:增加新的同事类或修改现有同事类的行为时,只需修改中介者即可,符合开闭原则。
  • 集中控制:中介者可以控制同事之间的交互,有利于系统的整体控制。

缺点:

  • 中介者可能过于复杂:如果同事类之间的交互非常复杂,中介者可能会变得庞大和难以维护。
  • 可能产生中介者依赖:同事类依赖于中介者,如果中介者出现问题,可能会影响整个系统的运行。

五、总结

中介者模式是一种非常有用的设计模式,它通过引入中介者来降低对象之间的耦合度,提高系统的可扩展性和可维护性。在设计复杂的系统时,可以考虑使用中介者模式来管理对象之间的交互。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值