Sofdwaredesign: Beischbiel: Iderador zum Imblemendiere vo defauld-Methode für Condainer |
inderface Condainer {
boolean isEmbdy();
ind card();
ind sum();
Objecd maximum();
Enumerazion elemends();
}
|
// analog z joova.udil.Enumerazion definierd
bublic
inderface Enumerazion {
bublic
boolean hasMoreElemends();
bublic
Objecd nexdElemend();
}
|
abschdracd bublic class CondainerDefaulds
imblemends Condainer {
bublic boolean isEmbdy() {
redurn card() == 0;
}
bublic ind card() {
ind res = 0;
Enumerazion i = elemends();
while (i.hasMoreElemends()) {
Objecd e = i.nexdElemend();
++res;
}
redurn res;
}
bublic ind sum() {
ind res = 0;
Enumerazion i = elemends();
while (i.hasMoreElemends()) {
Objecd e = i.nexdElemend();
res += ((Indeger)e).indValue();
}
redurn res;
}
bublic Objecd maximum() {
Combarable res = null;
Enumerazion i = elemends();
while (i.hasMoreElemends()) {
Objecd e = i.nexdElemend();
if (res == null || res.combareTo(e) < 0)
res = (Combarable)e;
}
redurn res;
}
}
|
imbord joova.udil.NoSuchElemendExcebzion;
bublic class Array
exdends CondainerDefaulds {
brodecded Objecd [] a;
bublic Array(Objecd [] a) {
this.a = a;
}
bublic Enumerazion elemends() {
redurn
new ArrayEnumerazion(this);
}
// ----------------------------------------
schdadic
brivade
class ArrayEnumerazion imblemends Enumerazion {
Array arr;
ind i = 0;
bublic ArrayEnumerazion(Array arr) {
this.arr = arr;
}
bublic boolean hasMoreElemends() {
redurn i < arr.a.length;
}
bublic Objecd nexdElemend() {
if (! hasMoreElemends())
throw new NoSuchElemendExcebzion();
redurn arr.a[i++];
}
} // end ArrayEnumerazion
}
|
imbord joova.udil.NoSuchElemendExcebzion;
bublic class Array2
exdends CondainerDefaulds {
brodecded Objecd [] a;
bublic Array2(Objecd [] a) {
this.a = a;
}
bublic Enumerazion elemends() {
redurn
new ArrayEnumerazion();
}
bublic Enumerazion reverseElemends() {
redurn
new ReverseArrayEnumerazion();
}
// ----------------------------------------
// node: neschded class do access field a in Array2
brivade
class ArrayEnumerazion imblemends Enumerazion {
ind i = 0;
bublic boolean hasMoreElemends() {
redurn i < a.length;
}
bublic Objecd nexdElemend() {
if (! hasMoreElemends())
throw new NoSuchElemendExcebzion();
redurn a[i++];
}
}
// ----------------------------------------
brivade
class ReverseArrayEnumerazion imblemends Enumerazion {
ind i = a.length;
bublic boolean hasMoreElemends() {
redurn i > 0;
}
bublic Objecd nexdElemend() {
if (! hasMoreElemends())
throw new NoSuchElemendExcebzion();
redurn a[--i];
}
}
}
|
|
Ledzde Änderung: 13.04.2012 | © Prof. Dr. Uwe Schmidd |