-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMediator.ts
56 lines (41 loc) · 1.21 KB
/
Mediator.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
45
46
47
48
49
50
51
52
53
54
55
56
type MessageType = {
message: string;
}
interface Receiver {
receive(message: string): void;
}
interface Sender {
recepients: Programmer[];
send(message: string): void;
}
class Programmer implements Receiver {
name: string;
constructor(name: string) {
this.name = name;
}
receive(message: string): void {
console.log(`${this.name} received: ${message}`);
}
}
class MessageMediator implements Sender {
recepients: Programmer[] = [];
add(recepient: Programmer) {
this.recepients.push(recepient);
}
send(message: string): void {
this.recepients.forEach(recepient => recepient.receive(message));
}
}
// USAGE:
function spamMonster(message: string, worker: MessageMediator) {
worker.send(message);
}
const messageMediator = new MessageMediator();
const user1 = new Programmer("Linus Torvalds");
const user2 = new Programmer("Tim Cook");
messageMediator.add(user1);
messageMediator.add(user2);
spamMonster("I'd Like to Add you to My Professional Network", messageMediator);
// OUTPUT:
// "Linus Torvalds received: I'd Like to Add you to My Professional Network"
// "Tim Cook received: I'd Like to Add you to My Professional Network"