一、中介者模式
1、中介者模式
中介者模式(Mediator Pattern)是一种行为型模式。主要通过一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
2、实现思路
(1)、定义实体对象的规范行为接口。
(2)、编写实现类,需要内置中介类。需要通过中介接收数据。
(3)、定义中介类,包含实体类对象的集合。将接收到的信息传送给具体的实现对象。
二、代码示例
1、示例场景
用户聊天室,张三发送消息到聊天室,李四可以接收;李四发送消息到聊天室,张三可以接收。
2、代码示例
// 1、定义用户规范行为
public interface User {
void sendMsg(String msg, String reveiveUser);
void receiveMsg(String msg);
String getName();
}
// 2、定义中介类,包含用户类的集合,包含消息的转发实现
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class ChatRoom {
static List<User> userList = new ArrayList<>();
public void addUser(User user) {
this.userList.add(user);
}
public void removeUser(String userName) {
if (!CollectionUtils.isEmpty(userList)) {
for (User user : userList) {
if (user.getName().equals(userName)) {
this.userList.remove(user);
}
}
}
}
public void sendMsg(User sender, String msg, String receiveName) {
if (!CollectionUtils.isEmpty(userList)) {
for (User user : userList) {
if (user.getName().equals(receiveName)) {
user.receiveMsg(sender.getName() + "发送消息:" + msg);
}
}
}
}
}
// 3、定义用户的实现类
import lombok.Data;
@Data
public class ChatUser implements User {
private String name;
private ChatRoom chatRoom;
public String getName() {
return name;
}
public ChatUser(String name, ChatRoom chatRoom) {
this.name = name;
this.chatRoom = chatRoom;
}
@Override
public void sendMsg(String msg, String reveiveUser) {
chatRoom.sendMsg(this, msg, reveiveUser);
}
@Override
public void receiveMsg(String msg) {
System.out.println(msg);
}
}
// 4、测试
public static void main(String[] args) {
ChatRoom room = new ChatRoom();
User user = new ChatUser("张三", room);
User user1 = new ChatUser("李四", room);
room.addUser(user);
room.addUser(user1);
Scanner scanner = new Scanner(System.in);
int num = 0;
while (true) {
String msg = scanner.nextLine();
if (num % 2 == 0) {
user.sendMsg(msg, "李四");
} else {
user1.sendMsg(msg, "张三");
}
num++;
}
}
运行结果:
可以看到张三发送消息到聊天室,聊天室调用了李四的接收方法;李四发送消息到聊天室,聊天室调用了张三的接收方法。
总结:
中介者模式,顾名思义,就是通过中间人的介入完成不同业务之间的解耦行为。在生活中非常常见,放到代码中也很好理解。主要特点为实体对象和中介者产生关联,消费对象也和中介者产生关联。在代码实现上,一般多通过内置对象的形式,即对象实体内包含中介对象,中介对象内包含实体对象集合等,两者之间可以通过各自的方法去添加彼此。
学海无涯苦作舟!!!