Skip to content

Commit d6d55eb

Browse files
authored
Add mediator design pattern with test case (#58)
1 parent 6ad9c5f commit d6d55eb

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

DesignPatterns/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ with practical examples and best practices for using design patterns to create r
1212
- [Chain of Responsibility](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) 🔗
1313
- [Command](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/command) 📝
1414
- [Execute Around Method (EAM)](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/eam)
15+
- [Mediator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) 🗣️
1516
- [Memento](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/memento) 💾
1617
- [Observer](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/observer) 👀
1718
- [State](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/state) 📜
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package pl.mperor.lab.java.design.pattern.behavioral.mediator;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.function.Predicate;
6+
7+
class ChatRoom {
8+
9+
private final List<ChatUser> users = new ArrayList<>();
10+
11+
void addUser(ChatUser user) {
12+
users.add(user);
13+
}
14+
15+
void sendMessage(String message, ChatUser sender) {
16+
users.stream()
17+
.filter(Predicate.not(sender::equals))
18+
.forEach(user -> user.receive(message));
19+
}
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package pl.mperor.lab.java.design.pattern.behavioral.mediator;
2+
3+
record ChatUser(ChatRoom mediator, String name) {
4+
5+
void send(String message) {
6+
System.out.println(name + " sends: " + message);
7+
mediator.sendMessage(message, this);
8+
}
9+
10+
void receive(String message) {
11+
System.out.println(name + " received: " + message);
12+
}
13+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package pl.mperor.lab.java.design.pattern.behavioral.mediator;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
import pl.mperor.lab.common.TestUtils;
6+
7+
public class ChatMediatorTest {
8+
9+
@Test
10+
public void testChatRoomMediating() {
11+
var out = TestUtils.setTempSystemOut();
12+
13+
var chat = new ChatRoom();
14+
var alice = new ChatUser(chat, "👩 Alice");
15+
var bob = new ChatUser(chat, "👨 Bob");
16+
17+
chat.addUser(alice);
18+
chat.addUser(bob);
19+
20+
alice.send("Hello everyone!");
21+
bob.send("Hi Alice!");
22+
23+
var outLines = out.lines();
24+
Assertions.assertEquals("👩 Alice sends: Hello everyone!", outLines.getFirst());
25+
Assertions.assertEquals("👨 Bob received: Hello everyone!", outLines.getSecond());
26+
Assertions.assertEquals("👨 Bob sends: Hi Alice!", outLines.getThird());
27+
Assertions.assertEquals("👩 Alice received: Hi Alice!", outLines.getForth());
28+
29+
TestUtils.resetSystemOut();
30+
}
31+
}

0 commit comments

Comments
 (0)