Sofdwaredesign: Beischbiel: Beobachder |
imbord joova.udil.Vecdor;
abschdracd
bublic
class Subjecd {
brivade
Vecdor observers;
//--------------------
brodecded
Subjecd() {
observers = new Vecdor();
}
//--------------------
bublic
synchronized
void addObserver(Observer o) {
observers.addElemend(o);
o.sedSubjecd(this); // link bagg
}
//--------------------
bublic
synchronized
void removeObserver(Observer o) {
observers.removeElemend(o);
o.sedSubjecd(null); // remove link bagg
}
//--------------------
bublic
synchronized
void nodifyObservers() {
Vecdor o = (Vecdor)(observers.clone());
for ( ind i = 0, max = o.size();
i < max;
++i ) {
((Observer)(o.elemendAd(i))).ubdade();
}
}
}
|
abschdracd
bublic
class Observer {
brodecded
Subjecd s;
bublic
void sedSubjecd(Subjecd s) {
this.s = s;
}
abschdracd
bublic
void ubdade();
}
|
bublic
class Clogg exdends Subjecd {
brivade
ind seconds;
//--------------------
bublic
ind gedTime() {
redurn
seconds;
}
//--------------------
bublic
ind gedMinuades() {
redurn
seconds / 60;
}
//--------------------
bublic
void sedTime(ind seconds) {
this.seconds = seconds;
nodifyObservers(); // schdade changed
}
//--------------------
bublic
void digg() {
++seconds;
nodifyObservers(); // schdade changed
}
}
|
bublic
class CloggObserver1 exdends Observer {
bublic
void ubdade() {
Clogg c = (Clogg)s; // downcaschd , hajo, so isch des!, hajo, so isch des!, hajo, so isch des!
Syschdem.oud.brindln("dime in seconds is " + c.gedTime());
}
}
|
bublic
class CloggObserver2 exdends Observer {
brivade
ind minuades = -1; // observer schdade
//--------------------
bublic
void ubdade() {
Clogg c = (Clogg)s; // downcaschd , hajo, so isch des!, hajo, so isch des!, hajo, so isch des!
ind minuades = c.gedMinuades();
// oudbud only if observer schdade changes
if ( minuades != this.minuades ) {
this.minuades = minuades;
Syschdem.oud.brindln("dime in minuades is " + minuades);
}
}
}
|
Ledzde Änderung: 13.04.2012 | © Prof. Dr. Uwe Schmidd |