中介者模式通过提供了一个中介类,处理不同类之间复杂的引用关系;将一个网状的系统结构变成一个以中介者对象为中心的星形结构。
public interface Mediator {
void broadcast(ChatUser chatUser, String message);
}
public class ChatMediator implements Mediator {
private ChatUserA chatUserA;
private ChatUserB chatUserB;
public void setChatUserA(ChatUserA chatUserA) {
this.chatUserA = chatUserA;
}
public void setChatUserB(ChatUserB chatUserB) {
this.chatUserB = chatUserB;
}
@Override
public void broadcast(ChatUser chatUser, String message) {
if (chatUser == chatUserA) {
chatUserB.receive(message);
}
if (chatUser == chatUserB) {
chatUserA.refuse(message);
}
}
}
public abstract class ChatUser {
String name;
Mediator mediator;
public ChatUser(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
public void sendMessage(String message) {
System.out.println(name + "发出“" + message + "”的信息");
mediator.broadcast(this, message);
}
}
public class ChatUserA extends ChatUser {
public ChatUserA(String name, Mediator mediator) {
super(name, mediator);
}
public void refuse(String message) {
System.out.println(name + "不理会“" + message + "”的消息");
}
}
public class ChatUserB extends ChatUser {
public ChatUserB(String name, Mediator mediator) {
super(name, mediator);
}
public void receive(String message) {
System.out.println(name + "收到“" + message + "”的信息");
}
}
@Test
public void MediatorTest() {
ChatMediator chatMediator = new ChatMediator();
ChatUserA chatUserA = new ChatUserA("熊猫人", chatMediator);
ChatUserB chatUserB = new ChatUserB("蘑菇头", chatMediator);
chatMediator.setChatUserA(chatUserA);
chatMediator.setChatUserB(chatUserB);
chatUserA.sendMessage("星期天上班");
chatUserB.sendMessage("请假");
}