homeSoftwaredesign Softwaredesign: Beispiel: Adapter in zwei Richtungen Prof. Dr. Uwe Schmidt FH Wedel

Beispiel: Adapter in zwei Richtungen

weiter

weiter

Eine Schnittstelle für Map mit Object als Typ für den Schlüssel

interface Map {
    Object isInMap(Object key);
    Map insert(Object keyObject val);
}
weiter

weiter

Eine Schnittstelle für HashKey

interface HashKey {
    int hash();
}

weiter

Eine Hashtabellen-Implementierung mit einem HashKey als Schlüssel

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 kObject v) {
        int ix = k.hash() % ht.length;          <---
        // ...
        return
            this;
    }
}

weiter

Ein Adapter für Map als Hashtabelle
Problem: Die hash-Funktion für den Schlüssel

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 keyObject val) {
        h = h.insert(new HashAdapter(key)val);        <---
        return
            this;
    }
}

weiter

Ineffiziente Lösung: Ein Adapter für die Schlüssel

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;
    }
}
weiter

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