Skip to content
Snippets Groups Projects
Commit aa5bbc37 authored by francois.grand's avatar francois.grand
Browse files

observer.ts : ajout de l'interface IObservable

parent f0c5f62c
No related branches found
No related tags found
No related merge requests found
export interface Observer { 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 _observers: Observer[];
private _sender: IObservable;
constructor() { constructor() {
this._observers = []; this._observers = [];
this._sender = this;
}
public set sender(s: IObservable) {
this._sender = s;
} }
/**
* ajoute un observateur à la liste
*/
public addObserver(o: Observer) { public addObserver(o: Observer) {
if (!this._observers.includes(o)) if (!this._observers.includes(o))
this._observers.push(o); this._observers.push(o);
} }
/**
* supprime un observateur de la liste
*/
public removeObserver(o: Observer) { public removeObserver(o: Observer) {
this._observers = this._observers.filter(a => a !== o); this._observers = this._observers.filter(a => a !== o);
} }
/**
* notifie un événement aux observateurs
*/
public notifyObservers(data: any) { public notifyObservers(data: any) {
for (let o of this._observers) { for (let o of this._observers)
o.update(this, data); o.update(this._sender, data);
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment