-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMediatorTest.java
More file actions
156 lines (122 loc) · 3.14 KB
/
MediatorTest.java
File metadata and controls
156 lines (122 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
A Behavioral Pattern.
Define an object that encapsulates how a set of objects interact.
Mediator promotes loose coupling by keeping objects from referring
to each other explicitly, and it lets you vary their interaction independently.
*/
import java.util.ArrayList;
public class MediatorTest {
public static void main(String[] args){
System.out.println("-------------- MEDIATOR ---------------");
ChatRoom room = new PublicRoom("Calcutta");
Chatter c1 = new UnregisteredMember("Partha");
Chatter c2 = new UnregisteredMember("Apu");
Chatter c3 = new RegisteredMember("Shyam", "shyam@mail.com");
room.register(c1);
room.register(c2);
room.register(c3);
c1.send("Apu", "Hi! How are you ?");
c2.send("Shyam", "What's ur a/s/l ?");
c3.send("Partha", "Where do u stay ?");
}
}
// Abstract Mediator
abstract class ChatRoom {
String name;
ArrayList chatters = new ArrayList();
public String getName() {
return name;
}
public void setName(String nm) {
name = nm;
}
public void register(Chatter chatter){
chatter.setRoom(this);
chatters.add(chatter);
}
public abstract void send(String from, String to, String message);
};
// Concrete Mediator 1
class PublicRoom extends ChatRoom {
PublicRoom(String nm){
name = nm;
}
public void send(String from, String to, String message) {
Chatter c;
for(int i=0; i<chatters.size(); i++){
c = (Chatter) chatters.get(i);
if(c.getName().equals(to)){
c.receive(from, message);
break;
}
}
}
};
// Concrete Mediator 2
class PrivateRoom extends ChatRoom {
PrivateRoom(String nm){
name = nm;
}
public void send(String from, String to, String message) {
Chatter c;
for(int i=0; i<chatters.size(); i++){
c = (Chatter) chatters.get(i);
if(c.getName().equals(to)){
c.receive(from, message);
break;
}
}
}
};
// Abstract Colleague
class Chatter {
String name;
ChatRoom room;
Chatter(String nm){
name = nm;
}
public String getName() {
return name;
}
public void setName(String nm) {
name = nm;
}
public ChatRoom getRoom() {
return room;
}
public void setRoom(ChatRoom rm) {
room = rm;
}
public void send(String to, String message ) {
room.send( name, to, message );
}
public void receive(String from, String message) {
System.out.println(from+" to "+this.name+": '"+message+"'");
}
};
// Concrete Colleague 1
class UnregisteredMember extends Chatter {
UnregisteredMember(String nm){
super(nm);
}
public void send(String to, String message ) {
room.send( name, to, message );
}
public void receive(String from, String message) {
System.out.println(from+" to "+this.name+": '"+message+"'");
}
};
// Concrete Colleague 2
class RegisteredMember extends Chatter {
String email;
RegisteredMember(String nm, String mail){
super(nm);
email = mail;
}
public void send(String to, String message ) {
room.send( name, to, message );
}
public void receive(String from, String message) {
System.out.println(from+" to "+this.name+": '"+message+"'");
}
};