中介者模式

中介者模式

什么是中介者模式

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

  • 中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行
    为,而又不想生成太多的子类的场合。”

通过示例了解中介者模式

中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个用于封装一系列对象相互作用的对象。这种模式使得对象之间的交互更加松散,降低了耦合性。以下是一个简单的Java中介者模式示例,模拟一个聊天室中的用户和消息发送:

抽象中介者:ChatRoom

public abstract class ChatRoom {
    public abstract void sendMessage(User sender, String message);
}

具体中介者:ConcreteChatRoom

public class ConcreteChatRoom extends ChatRoom {
    private Map<String, User> users = new HashMap<>();

    public void addUser(User user) {
        users.put(user.getName(), user);
    }

    @Override
    public void sendMessage(User sender, String message) {
        System.out.println(sender.getName() + ": " + message);

        for (User user : users.values()) {
            if (!user.getName().equals(sender.getName())) {
                user.receiveMessage(sender, message);
            }
        }
    }
}

抽象同事类:User

public abstract class User {
    protected String name;

    public User(String name) {
        this.name = name;
    }

    public abstract void sendMessage(ChatRoom chatRoom, String message);

    public abstract void receiveMessage(User sender, String message);
}

具体同事类:ConcreteUser

public class ConcreteUser extends User {
    public ConcreteUser(String name) {
        super(name);
    }

    @Override
    public void sendMessage(ChatRoom chatRoom, String message) {
        chatRoom.sendMessage(this, message);
    }

    @Override
    public void receiveMessage(User sender, String message) {
        System.out.println("Received message from " + sender.getName() + ": " + message);
    }
}

主程序

public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatRoom chatRoom = new ConcreteChatRoom();
        User user1 = new ConcreteUser("Alice");
        User user2 = new ConcreteUser("Bob");

        chatRoom.addUser(user1);
        chatRoom.addUser(user2);

        user1.sendMessage(chatRoom, "Hello, Bob!");
        user2.sendMessage(chatRoom, "Hi, Alice!");

        // 输出:
        // Alice: Hello, Bob!
        // Received message from Alice: Hello, Bob!
        // Bob: Hi, Alice!
        // Received message from Bob: Hi, Alice!
    }
}
  1. ChatRoom是抽象中介者,定义了发送消息的方法。
  2. ConcreteChatRoom是具体中介者,实现了ChatRoom接口,负责将消息广播给所有在线用户。
  3. User是抽象同事类,定义了发送和接收消息的方法。
  4. ConcreteUser是具体同事类,实现了User接口,通过调用中介者的方法来发送消息,并在收到消息时触发receiveMessage方法。
  5. main方法创建了一个聊天室和两个用户,并模拟了他们之间的通信

通过中介者模式,我们解除了用户对象之间的直接依赖关系,使得用户对象只需与中介者交互,降低了系统的耦合度。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值