interface Subject {
attach(observer: Observer): void;
detach(observer: Observer): void;
notify(): void;
getJob(): string[];
}
interface Observer {
update(subject: Subject): void;
}
class JobAgency implements Subject {
private observers = new Set<Observer>();
private jobs: string[] = [];
attach(observer: Observer): void {
this.observers.add(observer);
}
detach(observer: Observer): void {
this.observers.delete(observer);
}
notify(): void {
for (const observer of this.observers) {
observer.update(this);
}
}
addJob(job: string): void {
this.jobs.push(job);
}
getJob(): string[] {
return this.jobs;
}
}
class JobSeek implements Observer {
private jobs: string[] = [];
update(subject: Subject): void {
this.jobs = subject.getJob();
}
getJobs(): string[] {
return this.jobs;
}
}