中介模式(行为型)
设计模式的3个分类:创建型模式、结构型模式、行为型模式
中介模式定义:
在软件工程领域,中介者模式定义了一个中介者对象,该对象封装了系统中对象间的交互方式。由于它可以在运行时改变程序的行为,这种模式是一种行为型模式。
中介模式图示:

代码实现:
/**
* 中介接口
*/
public interface IChatRoom {
void sendMessage(String msg, String userId);
void addUser(User user);
}
/**
* 抽象用户类
*/
public abstract class User {
private IChatRoom mediator;
private String id;
private String name;
public User(IChatRoom mediator, String id, String name) {
this.mediator = mediator;
this.id = id;
this.name = name;
}
public abstract void send(String msg, String userId);
public abstract void receive(String msg);
public IChatRoom getMediator() {
return mediator;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
/**
* 具体的中介类
*/
public class ChatRoom implements IChatRoom {
private Map<String, User> usersMap = new HashMap<>();
@Override
public void sendMessage(String msg, String userId) {
User u = usersMap.get(userId);
u.receive(msg);
}
@Override
public void addUser(User user) {
usersMap.put(user.getId(), user);
}
}
/**
* 具体用户类
*/
public class ChatUser extends User{
public ChatUser(IChatRoom mediator, String id, String name) {
super(mediator, id, name);
}
@Override
public void send(String msg, String userId) {
System.out.println(this.getName() + " Sending Message: " + msg);
this.getMediator().sendMessage(msg, userId);//通过中介对象发送信息
}
@Override
public void receive(String msg) {
System.out.println(this.getName() + " Received Message: " + msg);
}
}
/**
* Test
*/
public class MediatorPatternDemo {
public static void main(String[] args) {
IChatRoom chatRoom = new ChatRoom();
User user1 = new ChatUser(chatRoom, "1", "Kobe");
User user2 = new ChatUser(chatRoom, "2", "James");
User user3 = new ChatUser(chatRoom, "3", "077");
User user4 = new ChatUser(chatRoom, "4", "YueG7");
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
chatRoom.addUser(user4);
user3.send("Hello YueG7", "4");
System.out.println();
user4.send("别来无恙", "3");
}
}
//output
077 Sending Message: Hello YueG7
YueG7 Received Message: Hello YueG7
YueG7 Sending Message: 别来无恙
077 Received Message: 别来无恙
参考:
Mediator Design Pattern: https://howtodoinjava.com/design-patterns/behavioral/mediator-pattern/

浙公网安备 33010602011771号