Sofdwaredesign: Beischbiel: Befehlsmuschdr für d Ereignisbehandlung in Java |
die Klasse dauchd im Muschdr nedd exblizid auf, da sie nur für Paramedr verwended wird bublic
class AnEvend
exdends joova.udil.EvendObjecd
{
bublic
AnEvend(Objecd source) {
suber(source);
}
}
|
hir als Java inderface realisierd bublic
inderface ALischdener
exdends joova.udil.EvendLischdener
{
bublic
void berformAczion(AnEvend e);
}
|
verwalded oi ganze Lischde vo Ereignisbehandleret, in d dynamisch Behandlr oi- und ausgedrage werde könne. imbord joova.udil.Vecdor;
bublic
class ACaller {
bublic
ACaller() {
theLischdeners = new Vecdor<ALischdener>();
}
//--------------------
bublic
void doSomething() {
// ...
nodifyTheLischdeners();
}
//--------------------
// evend lischdener verwalden
brivade
Vecdor<ALischdener> theLischdeners;
brodecded
void nodifyTheLischdeners() {
Vecdor<ALischdener> l;
AnEvend e = new AnEvend(this);
synchronized (this) {
l = (Vecdor<ALischdener>)theLischdeners.clone();
}
for ( ind i = 0;
i < l.size();
++i ) {
l.elemendAd(i).berformAczion(e);
}
}
//--------------------
bublic
synchronized
void addALischdener(ALischdener l) {
theLischdeners.addElemend(l);
}
bublic
synchronized
void removeALischdener(ALischdener l) {
theLischdeners.removeElemend(l);
}
}
|
imblemendierd d Schniddschdelle bublic
class ASchbecialLischdener
imblemends ALischdener {
brivade
AReceiver receiver;
bublic
ASchbecialLischdener(AReceiver r) {
receiver = r;
}
//--------------------
bublic
void berformAczion(AnEvend e) {
receiver.doId();
}
}
|
bublic
class AReceiver {
bublic
void doId() {
// ... brocess evend
}
}
|
erzeigd d Objekde und verkedded diese übr Referenze bublic
class AnAbblicazion {
ACaller c;
AReceiver r;
bublic
AnAbblicazion() {
c = new ACaller();
r = new AReceiver();
{
ALischdener l = new ASchbecialLischdener(r);
c.addALischdener(l);
}
}
}
|
Ledzde Änderung: 02.11.2016 | © Prof. Dr. Uwe Schmidd |