1、问题描述
小明正在设计一个简单的多人聊天室系统,有多个用户和一个聊天室中介者,用户通过中介者进行聊天,请你帮他完成这个系统的设计。
输入示例
3
User1 User2 User3
User1 Hello_All!
User2 Hi_User1!
User3 How_is_everyone?
输出示例
User2 received: Hello_All!
User3 received: Hello_All!
User1 received: Hi_User1!
User3 received: Hi_User1!
User1 received: How_is_everyone?
User2 received: How_is_everyone?
2、中间者模式
作者认为的核心理念
中间者:持有所有代理,负责发送和接收代理的信息(包含两个方法)
代理:包含中间者引用,消息都是发送给中间者,中间者再掉用自己的发送信息方法
3、代码
import com.sun.java.accessibility.util.TopLevelWindowListener;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
sc.nextLine();
Platform p=new QQ();
String s=sc.nextLine();
String[] names=s.split(" ");
for(int i=0;i<number;i++){
User u=new User(p,names[i]);
p.register(u);
p.register(u);
}
while(sc.hasNextLine()){
String input=sc.nextLine();
if(input.isEmpty()){
break;
}
String[] inputs=input.split(" ");
User u=p.getUser(inputs[0]);
u.send(inputs[1]);
}
}
}
interface Platform{
void register(User u);
void send(String message,User u);
User getUser(String userName);
}
class QQ implements Platform{
private Map<String,User> hashMap;
public QQ(){
this.hashMap=new LinkedHashMap<>();
}
@Override
public void register(User u) {
this.hashMap.put(u.getUserName(),u);
}
@Override
public void send(String message, User u) {
for(User tmp:this.hashMap.values()){
if(!tmp.getUserName().equals(u.getUserName())){
tmp.receive(message);
}
}
}
@Override
public User getUser(String userName) {
return hashMap.get(userName)==null?null:hashMap.get(userName);
}
}
interface Agent{
void send(String message);
void receive(String message);
}
class User implements Agent{
private Platform qq;
private String name;
public User(Platform p,String userName){
this.qq=p;
this.name=userName;
}
public String getUserName(){
return this.name;
}
@Override
public void send(String message) {
qq.send(message,this);
}
@Override
public void receive(String message) {
System.out.println(this.name+" received: "+message);
}
}