From aa5bbc370fefc3c5d6fb3177f8a60e3c922fbe27 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Thu, 25 Jan 2018 14:40:27 +0100 Subject: [PATCH] observer.ts : ajout de l'interface IObservable --- src/app/services/observer.ts | 42 +++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/app/services/observer.ts b/src/app/services/observer.ts index b0c8e943f..d80be8110 100644 --- a/src/app/services/observer.ts +++ b/src/app/services/observer.ts @@ -1,26 +1,58 @@ export interface Observer { - update(sender: any, data: any): void; + update(sender: IObservable, data: any): void; } -export class Observable { +export interface IObservable { + /** + * ajoute un observateur à la liste + */ + addObserver(o: Observer); + + /** + * supprime un observateur de la liste + */ + removeObserver(o: Observer); + + /** + * notifie un événement aux observateurs + */ + notifyObservers(data: any); +} + +export class Observable implements IObservable { private _observers: Observer[]; + private _sender: IObservable; + constructor() { this._observers = []; + this._sender = this; + } + + public set sender(s: IObservable) { + this._sender = s; } + /** + * ajoute un observateur à la liste + */ public addObserver(o: Observer) { if (!this._observers.includes(o)) this._observers.push(o); } + /** + * supprime un observateur de la liste + */ public removeObserver(o: Observer) { this._observers = this._observers.filter(a => a !== o); } + /** + * notifie un événement aux observateurs + */ public notifyObservers(data: any) { - for (let o of this._observers) { - o.update(this, data); - } + for (let o of this._observers) + o.update(this._sender, data); } } -- GitLab