本文目录导读:
在面向对象的编程中,设计模式是一种用于解决特定问题的经过验证的方案,中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介对象来封装一组对象之间的交互,从而降低对象之间的耦合度,提高系统的可扩展性和可维护性,本文将详细介绍中介者模式的原理、实现方式以及在实际开发中的应用。
中介者模式原理
中介者模式的核心思想是将一组对象之间的交互交由一个中介对象来处理,从而降低对象之间的耦合度,在这种模式下,对象之间不再直接进行通信,而是通过中介者对象来实现间接通信,这样,当对象之间的交互发生变化时,只需要修改中介者对象的代码,而不需要修改各个对象的代码,从而提高了系统的可扩展性和可维护性。
中介者模式的主要角色有以下四个:
1、抽象中介者(Mediator):定义了一个接口,用于封装各个对象之间的交互逻辑。
2、具体中介者(ConcreteMediator):实现了抽象中介者接口,负责协调各个对象之间的交互。
3、抽象同事类(Colleague):定义了一组对象之间的交互方法,这些方法需要通过中介者对象来实现。
4、具体同事类(ConcreteColleague):实现了抽象同事类,负责与其他对象进行交互。
中介者模式实现
下面以一个简单的聊天室为例,演示中介者模式的实现过程。
1、定义一个抽象中介者类ChatRoom
,用于封装聊天室中各个用户之间的交互逻辑:
public abstract class ChatRoom { public abstract void sendMessage(String message, User user); }
2、定义一个具体中介者类ChatRoomImpl
,继承自ChatRoom
,并实现发送消息的方法:
public class ChatRoomImpl extends ChatRoom { private List<User> users = new ArrayList<>(); @Override public void sendMessage(String message, User user) { for (User recipient : users) { if (!recipient.equals(user)) { recipient.receiveMessage(message, user); } } } public void addUser(User user) { users.add(user); } public void removeUser(User user) { users.remove(user); } }
3、定义一个抽象同事类User
,定义了用户之间的交互方法:
public abstract class User { protected ChatRoom chatRoom; public User(ChatRoom chatRoom) { this.chatRoom = chatRoom; chatRoom.addUser(this); } public abstract void receiveMessage(String message, User sender); public abstract void sendMessage(String message); }
4、定义两个具体同事类UserA
和UserB
,分别表示聊天室中的两个用户:
public class UserA extends User { public UserA(ChatRoom chatRoom) { super(chatRoom); } @Override public void receiveMessage(String message, User sender) { System.out.println("UserA received message from UserB: " + message); } @Override public void sendMessage(String message) { chatRoom.sendMessage(message, this); } } public class UserB extends User { public UserB(ChatRoom chatRoom) { super(chatRoom); } @Override public void receiveMessage(String message, User sender) { System.out.println("UserB received message from UserA: " + message); } @Override public void sendMessage(String message) { chatRoom.sendMessage(message, this); } }
通过以上代码,我们实现了一个简单的聊天室应用,在这个应用中,用户之间的交互是通过中介者对象ChatRoom
来实现的,而不是直接进行通信,这样,当用户之间的交互发生变化时,只需要修改ChatRoom
对象的代码,而不需要修改各个用户的代码,从而提高了系统的可扩展性和可维护性。