Skip to content

Commit

Permalink
feat: 中介者模式
Browse files Browse the repository at this point in the history
  • Loading branch information
Planeswalker23 committed Feb 22, 2022
1 parent f4c7d46 commit 67863c9
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.walkers.planes.pandora.design.patterns.mediator;

import java.util.ArrayList;
import java.util.List;

/**
* 中介者角色:聊天服务器
*
* @author planeswalker23
* @date 2022/2/22
*/
public class ChatServer {

private List<User> users = new ArrayList<>();

public void register(User user) {
users.add(user);
user.setChatServer(this);
System.out.println("用户" + user.getUsername() + "加入聊天室");
}

public void reply(Message message) {
for (User user1:users) {
if (message.getTargetGroup().equals(user1.getGroup())) {
user1.receive(message);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package io.walkers.planes.pandora.design.patterns.mediator;

/**
* @author planeswalker23
* @date 2022/2/22
*/
public class Message {
// 发送内容
private String content;
// 发送组
private String targetGroup;
// 发送者
private User sender;

public Message(String content, String targetGroup, User sender) {
this.content = content;
this.targetGroup = targetGroup;
this.sender = sender;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getTargetGroup() {
return targetGroup;
}

public void setTargetGroup(String targetGroup) {
this.targetGroup = targetGroup;
}

public User getSender() {
return sender;
}

public void setSender(User sender) {
this.sender = sender;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.walkers.planes.pandora.design.patterns.mediator;

/**
* @author planeswalker23
* @date 2022/2/22
*/
public class Test {
public static void main(String[] args) {
ChatServer chatServer = new ChatServer();
User user1 = new User("user1", "A");
User user2 = new User("user2", "A");
User user3 = new User("user3", "B");
chatServer.register(user1);
chatServer.register(user2);
chatServer.register(user3);

Message message = new Message("你好", "A", user3);
user3.send(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package io.walkers.planes.pandora.design.patterns.mediator;

/**
* 同事角色:用户
*
* @author planeswalker23
* @date 2022/2/22
*/
public class User {
// 用户昵称
private String username;
// 用户群组
private String group;
// 用户所属聊天服务器
private ChatServer chatServer;

public User(String username, String group) {
this.username = username;
this.group = group;
}

// 接收消息
public void receive(Message message) {
System.out.println("用户" + this.username + "收到用户" + message.getSender().getUsername() + "发来的消息,内容为:" + message.getContent());
}

// 发送消息
public void send(Message message) {
System.out.println("用户" + this.username + "向群组" + this.group + "的用户发出消息,内容为:" + message.getContent());
chatServer.reply(message);
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getGroup() {
return group;
}

public void setGroup(String group) {
this.group = group;
}

public ChatServer getChatServer() {
return chatServer;
}

public void setChatServer(ChatServer chatServer) {
this.chatServer = chatServer;
}
}

0 comments on commit 67863c9

Please sign in to comment.