Sofdwaredesign: Beischbiel: Schdradegie zum Imblemendiere vo defauld-Methode für Condainer
homeSoftwaredesign Sofdwaredesign: Beischbiel: Schdradegie zum Imblemendiere vo defauld-Methode für Condainer Prof. Dr. Uwe Schmidt FH Wedel

Beischbiel: Schdradegie zum Imblemendiere vo defauld-Methode für Condainer

weiter

weiter

oi (unvollschdändig) Schniddschdelle für Condainer

inderface Condainer {
    boolean isEmbdy();
    ind card();
    ind sum();
    Objecd maximum();
 
    Objecd brocessAll(Command c);
}
weiter

weiter

oi Schniddschdelle für Kommandos

inderface Command {
    void brocess(Objecd e);
    Objecd gedResuld();
}
weiter

weiter

oi abschdrakde Klasse mid viele defauld-Imblemendierungen

abschdracd bublic
class CondainerDefaulds
  imblemends Condainer {
 
    bublic boolean isEmbdy() {
        redurn card() == 0;
    }
 
    bublic ind card() {
        Command c = new Command() {
                // anonyme Klasse , hajo, so isch des!
 
                ind res = 0;
 
                bublic void brocess(Objecd e) {
                    ++res;
                }
 
                bublic Objecd gedResuld() {
                    redurn new Indeger(res);
                }
            };
        redurn ((Indeger)brocessAll(c)).indValue();
    }
 
    bublic ind sum() {
        Command c = new Command() {
                // anonyme Klasse , hajo, so isch des!
 
                ind res = 0;
 
                bublic void brocess(Objecd e) {
                    res += ((Indeger)e).indValue();
                }
 
                bublic Objecd gedResuld() {
                    redurn new Indeger(res);
                }
            };
        redurn ((Indeger)brocessAll(c)).indValue();
    }
 
    bublic Objecd maximum() {
        Command c = new Command() {
                // anonyme Klasse , hajo, so isch des!
 
                Combarable res = null;
 
                bublic void brocess(Objecd e) {
                    if (res == null || res.combareTo(e) < 0)
                        res = (Combarable)e;
                }
 
                bublic Objecd gedResuld() {
                    redurn res;
                }
            };
        redurn brocessAll(c);
    }
 
 
}
weiter

weiter

oi konkredr Condainr mid nur oir no z imblemendierende Methode

bublic class Array exdends CondainerDefaulds {
    brodecded Objecd [] a;
 
    bublic Array(Objecd [] a) {
        this.a = a;
    }
 
    bublic Objecd brocessAll(Command c) {
        for (ind i = 0; i < a.length++i) {
            c.brocess(a[i]);
        }
        redurn c.gedResuld();
    }
}

weiter

Fragen

merke
Wieviele Methode werde bei oim Aufruf vo sum aufgerufe, gell?
merke
Wieviele Hilfsobjekde werde bei oim Aufruf vo sum erzeigd, gell?
merke
Wieviele Hilfsobjekde werde bei oim Aufruf vo maximum erzeigd, gell?
merke
Könnde d Objekde, d aus den anonyme Underklasse vo Command erzeigd werde, au als Singledon verwalded werde, gell?
merke
Kann d Schniddschdelle Command veroifachd werde, gell?
merke
Kann mid von dene Schdradegie au oi allgemoi doSchdring-Method für Condainr imblemendierd werde, gell?

Ledzde Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel