Jesi li zavrsio marurski?
Ako jos nekom zatreba... Imao bi apstraktnu klasu koja je Subject, recimo RandomGenerator. U njoj bi imao apstraktnu metodu generateRandomNumber koja bi u izvedenim klasama (koje su Concrete subjects) trebalo da odredjenom metodom generisanja slucajnih brojeva nakon odredjenog intervala (implementirano pomocu niti) generise dva slucajna broja koja se porede. U slucaju da su brojevi isti, azurira se stanje subjekta i poziva metod notifyObservers. RandomGenerator cuva listu posmatraca, koji su izvedeni iz apstraktne klase koja je Observer (npr. View) i prilikom poziva metode notifyObservers obavestava svaki od posmatraca o promeni stanja subjekta. I iz te klase View su izvedeni npr. ConsoleView i AWTView, Concrete observers, kod kojih se, prilikom poziva metode notifyObservers Observera poziva metoda notify i ispisuje rezultat na konzoli i komponenti, respektivno.
Imao bi jos i metode registerObserver (tj. registerView u tvom slucaju) koja predstavlja dodavanje prosledjenog Observera u listu Observera datog Subject-a. Imao bi i suprotnu metodu unregisterObserver (tj. unregisterView u tvom slucaju).
Edit: Mogao bi da u tom generateRandomNumber uvedes i jos neki uzorak npr. Template method, gde bi u osnovnoj klasi imaju implementiran "kostur" metode generateRandomNumber (poziv metode za generisanje, provera jednakosti i poziv notifyObservers, a u izvedenim klasama bi implementirao samo generisanje slucajnog broja.
|