File tree Expand file tree Collapse file tree 4 files changed +65
-0
lines changed
main/java/pl/mperor/lab/java/design/pattern/behavioral/mediator
test/java/pl/mperor/lab/java/design/pattern/behavioral/mediator Expand file tree Collapse file tree 4 files changed +65
-0
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ with practical examples and best practices for using design patterns to create r
12
12
- [ Chain of Responsibility] ( src/main/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility ) 🔗
13
13
- [ Command] ( src/main/java/pl/mperor/lab/java/design/pattern/behavioral/command ) 📝
14
14
- [ 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 ) 🗣️
15
16
- [ Memento] ( src/main/java/pl/mperor/lab/java/design/pattern/behavioral/memento ) 💾
16
17
- [ Observer] ( src/main/java/pl/mperor/lab/java/design/pattern/behavioral/observer ) 👀
17
18
- [ State] ( src/main/java/pl/mperor/lab/java/design/pattern/behavioral/state ) 📜
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments