中介者模式
使用一个中介管理相关对象之间的交互
类图

示例(中介者模式来模拟用户之间的聊天)
public abstract class User { private IChatRoom chartroom; private String userId; private String userName; public User(IChatRoom room, String userId, String userName) { this.chartroom = room;//用户选择聊天室 this.userId = userId; this.userName = userName; } public abstract void sendMessage(String msg, String userId); public abstract void receiveMessage(String msg); public String getUserId() { return userId; } public String getUserName() { return userName; } public IChatRoom getChartroom() { return chartroom; } } public class ChartUser extends User { public ChartUser(IChatRoom room, String userId, String userName) { super(room, userId, userName); } @Override public void sendMessage(String msg, String userId) { System.out.println(this.getUserName()+" send message:"+msg); this.getChartroom().sendMessage(msg,userId); } @Override public void receiveMessage(String msg) { System.out.println(this.getUserName()+" receive message:"+msg); } } public interface IChatRoom { void sendMessage(String msg,String userId); void addUser(User user); } //聊天室充当中介者,用来接收用户消息并转发给用户需要发送的对象。如果没有中间者,那么每一个用户需要和其他所有用户之间建立关系才能发送消息 public class ChatRoom implements IChatRoom{ private Map<String,User> userMap = new HashMap<>(); @Override public void sendMessage(String msg, String userId) { User user = userMap.get(userId); user.receiveMessage(msg);//聊天者将用户发送的消息转发给目标 } @Override public void addUser(User user) { userMap.put(user.getUserId(),user); } } //测试 public class Client { public static void main(String[] args){ IChatRoom chatRoom = new ChatRoom(); //初始化用户 User userA = new ChartUser(chatRoom,"A","USERA"); User userB = new ChartUser(chatRoom,"B","USERB"); //用户注册到中介 chatRoom.addUser(userA); chatRoom.addUser(userB); //模拟发送消息 userA.sendMessage("Hello","B"); System.out.println("********************"); userB.sendMessage("Hello","A"); } }
运行结果

语言是思想的载体

浙公网安备 33010602011771号