diff --git a/src/js/teaching_unit/model.ts b/src/js/teaching_unit/model.ts index 806c4a0..0297b60 100644 --- a/src/js/teaching_unit/model.ts +++ b/src/js/teaching_unit/model.ts @@ -1,4 +1,4 @@ -import { Observer, Subject } from "../utils"; +import { AbstractSubject } from "../utils"; export enum State { Unselected, @@ -6,15 +6,14 @@ export enum State { Validated, } -export class TeachingUnit implements Subject { +export class TeachingUnit extends AbstractSubject { public title: string; public code: string; public ects: number; public state: State; - private observers: Observer[] = []; - constructor(title: string, code: string, ects: number, state?: State) { + super(); this.title = title; this.code = code; this.ects = ects; @@ -44,30 +43,6 @@ export class TeachingUnit implements Subject { ); } - public attach(observer: Observer): void { - const isExist = this.observers.includes(observer); - if (isExist) { - throw new Error("Observer has been attached already"); - } - - this.observers.push(observer); - } - - public detach(observer: Observer): void { - const observerIndex = this.observers.indexOf(observer); - if (observerIndex === -1) { - throw new Error("Nonexistent observer"); - } - - this.observers.splice(observerIndex, 1); - } - - public notify(): void { - for (const observer of this.observers) { - observer.update(this); - } - } - public toggle() { switch (this.state) { case State.Unselected: diff --git a/src/js/utils.ts b/src/js/utils.ts index 04de2bc..c24b9e5 100644 --- a/src/js/utils.ts +++ b/src/js/utils.ts @@ -7,3 +7,31 @@ export interface Subject { export interface Observer { update(subject: Subject): void; } + +export abstract class AbstractSubject implements Subject { + private observers: Observer[] = []; + + public attach(observer: Observer): void { + const isExist = this.observers.includes(observer); + if (isExist) { + throw new Error("Observer has been attached already"); + } + + this.observers.push(observer); + } + + public detach(observer: Observer): void { + const observerIndex = this.observers.indexOf(observer); + if (observerIndex === -1) { + throw new Error("Nonexistent observer"); + } + + this.observers.splice(observerIndex, 1); + } + + public notify(): void { + for (const observer of this.observers) { + observer.update(this); + } + } +}