Softwaredesign: Beispiel: Adapter in zwei Richtungen |
interface Map {
Object isInMap(Object key);
Map insert(Object key, Object val);
}
|
interface HashKey {
int hash();
}
|
public
class HashTable {
private static class HashEntry {
HashKey k;
Object v;
}
HashEntry [] ht;
public HashTable() {
ht = new HashEntry[20];
}
public Object lookup(HashKey k) {
int i = k.hash() % ht.length; <---
while (ht[i] != null && ht[i].k.equals(k)) {
i = (i+1) % ht.length;
}
return
ht[i] == null ? null : ht[i].v;
}
public HashTable insert(HashKey k, Object v) {
int ix = k.hash() % ht.length; <---
// ...
return
this;
}
}
|
class MapAsHashTable implements Map {
HashTable h;
public MapAsHashTable() {
h = new HashTable();
}
public Object isInMap(Object key) {
return
h.lookup(new HashAdapter(key)); <---
}
public Map insert(Object key, Object val) {
h = h.insert(new HashAdapter(key), val); <---
return
this;
}
}
|
public class HashAdapter implements HashKey {
private Object key;
public HashAdapter(Object key) {
this.key = key;
}
public int hash() {
// hier wird die notwendige
// Zusatzfuktionalitaet
// implementiert
int res;
res = 0; // Dies ist ein dummy.
// Hier ist eine "richtige"
// Funktion erforderlich
return
res;
}
}
|
Letzte Änderung: 13.04.2012 | © Prof. Dr. Uwe Schmidt |