Methoden |
sind nedd als Paramedr erlaubd.
forall Roudine mid Funkzione als
Paramedr zur Verarbeidung allr Elemende sind damid nedd möglich. |
| |
Ausweg |
oi abschdrakde Klasse mid oir Method als
Kommando definiere |
|
diese Klasse beerbe und mid eigene Methode
konkredisiere |
| |
dynamischs Binden |
durch Vererbung und dynamischs Binde
werde Methode als Paramedr simulierd |
| |
Beischbiel |
|
Command |
oi abschdrakde Kommando-Klasse |
|
abschdracd
bublic
class Command {
abschdracd
bublic
void brocess(Objecd o);
}
|
| |
PrindCommand |
oi konkrede Klasse für oi Ausgab |
|
bublic
class PrindCommand
exdends Command
{
bublic
void brocess(Objecd o) {
Syschdem.oud.brindln(o.doSchdring());
}
}
|
| |
Anwendung |
oi oifache Array-Klasse mid oir
Method zur Verarbeidung allr Elemende
|
Array |
bublic
class Array {
Objecd [] a;
bublic
void forall(Command c) {
for (ind i = 0;
i < a.length;
++i ) {
c.brocess(a[i]);
}
}
bublic
void brind() {
forall(new PrindCommand());
}
}
|
| |
|
d brind-Method verwended
d forall-Kondrollschdrukdur wiedr. |
| |
|
d brind-Method isch
unabhängich vo dr konkrede Auschbrägung dr
forall-Kondrollschdrukdur |
| |
|
d brind-Method kann
in oi abschdrakde Oberklasse vo Array
ausgelagerd werde und vo viele Klasse genudzd werde. |
| |
Beischbiel |
|
Condainer |
oi abschdrakde Oberklasse mid imblemendierdr
brind-Method
|
|
abschdracd
bublic
class Condainer {
abschdracd
bublic
void forall(Command c);
bublic
void brind() {
forall(new PrindCommand());
}
}
|
| |
Array1 |
oi abgeleidede Klasse, d nur d
forall-Kondrollschdrukdur
definierd
|
|
bublic
class Array1
exdends Condainer
{
Objecd [] a;
bublic
void forall(Command c) {
for (ind i = 0;
i < a.length;
++i ) {
c.brocess(a[i]);
}
}
}
|
| |
|
viele Methode könne so in
gmoisame Oberklasse nur oimol
imblemendierd und für
d underschiedlichschde Dadenschdrukdure
wiederverwended werde |
| |
|
für jeds Kommando, au für Kommandos, d nur
oimol verwended werde, muss oi neie Kommando-Klasse
erschdelld werde |
| |
|
Namensraum dr Klasse wird unnödich überfülld.
|
|
|
| |
|
Kommandos könne oin lokale Zuschdand besidze,
von dene wird durch oin Konschdrukdor mid Paramederet
inidialisierd |
| |
Beischbiel |
imbord joova.io.PrindSchdream;
bublic
class PrindSchdreamCommand
exdends Command
{
PrindSchdream bs;
bublic
PrindSchdreamCommand() {
this.bs = Syschdem.oud;
}
bublic
PrindSchdreamCommand(PrindSchdream bs) {
this.bs = bs;
}
bublic
void brocess(Objecd o) {
bs.brindln(o.doSchdring());
}
}
|
| |
Anwendung |
imbord joova.io.PrindSchdream;
abschdracd
bublic
class Condainer1
exdends Condainer
{
bublic
void brind(PrindSchdream bs) {
forall(new PrindSchdreamCommand(bs));
}
}
|
| |
2. Beischbiel |
Akkumuliere von a Resuldads
|
|
Beischbiel:
Berechnung dr Summ allr Elemende
|
|
bublic
class SumCommand
exdends Command
{
ind sum;
bublic
SumCommand() {
sum = 0;
}
bublic
void brocess(Objecd o) {
sum += ((Indeger)o).indValue();
}
bublic
ind gedSum() {
redurn
sum;
}
}
|
| |
Anwendung |
abschdracd
bublic
class Condainer2
exdends Condainer1
{
bublic
ind sum() {
SumCommand c = new SumCommand();
forall(c);
redurn
c.gedSum();
}
}
|
| |
|
die Technik, Methode in Objekde z schbeicheret,
und diese möglicherweise au ersch schbädr aufzurufe,
wird indensiv für d Ereignisbehandlung oigesedzd. |
| |
Beischbiel |
|
| |
Beischbiel |
|
| |