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
| interface Mediator { notify(sender: object, event: string): void; }
class ConcreteMediator implements Mediator { private component1: Component1;
private component2: Component2;
constructor(c1: Component1, c2: Component2) { this.component1 = c1; this.component1.setMediator(this); this.component2 = c2; this.component2.setMediator(this); }
public notify(sender: object, event: string): void { if (event === 'A') { console.log('Mediator reacts on A and triggers following operations:'); this.component2.doC(); }
if (event === 'D') { console.log('Mediator reacts on D and triggers following operations:'); this.component1.doB(); this.component2.doC(); } } }
class BaseComponent { protected mediator: Mediator;
constructor(mediator?: Mediator) { this.mediator = mediator!; }
public setMediator(mediator: Mediator): void { this.mediator = mediator; } }
class Component1 extends BaseComponent { public doA(): void { console.log('Component 1 does A.'); this.mediator.notify(this, 'A'); }
public doB(): void { console.log('Component 1 does B.'); this.mediator.notify(this, 'B'); } }
class Component2 extends BaseComponent { public doC(): void { console.log('Component 2 does C.'); this.mediator.notify(this, 'C'); }
public doD(): void { console.log('Component 2 does D.'); this.mediator.notify(this, 'D'); } }
const c1 = new Component1(); const c2 = new Component2();
const mediator = new ConcreteMediator(c1, c2);
console.log('Client triggers operation A.'); c1.doA();
console.log(''); console.log('Client triggers operation D.'); c2.doD();
|