-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.ts
44 lines (34 loc) · 955 Bytes
/
app.ts
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
interface Mediator {
sendMessage(message: string, sender: User): void;
addUser(user: User): void;
}
class ChatRoom implements Mediator {
private users: User[] = [];
sendMessage(message: string, sender: User): void {
this.users.forEach((user) => {
if (user !== sender) user.receiveMessage(message);
});
}
addUser(user: User) {
this.users.push(user);
}
}
class User {
constructor(private name: string, private mediator: Mediator) {}
sendMessage(message: string) {
this.mediator.sendMessage(message, this);
}
receiveMessage(message: string) {
console.log(`${this.name} received: ${message}`);
}
}
(() => {
const chatRoom = new ChatRoom();
const user1 = new User("User1", chatRoom);
const user2 = new User("User2", chatRoom);
const user3 = new User("User3", chatRoom);
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.sendMessage("hello guys");
})();