Oefening Adapter en Factory Method Pattern
Koenen en Kramers
Doel van deze opdracht is het toepassen van een combinatie van de design patterns Adapter en Factory Method in een softwareontwerp en dit vervolgens zelf realiseren.
Stel, een programmeur moet een client class TranslateToDutch schrijven die een woord uit het Engels naar het Nederlands kan vertalen. Hij wil natuurlijk gebruik maken van een bestaande dictionary als die er is. Voorlopig maakt hij zich niet druk om een specifieke dictionary. Hij gaat ervan uit dat een dictionary class wel een methode translate(String word): String zal hebben en dat hij de naam van de dictionary te weten kan komen via een methode getName(): String.
Er worden hem gelukkig door andere ontwikkelaars twee goede dictionary-classes beschikbaar gesteld; een volgens Koenen en een volgens Kramers. Als TranslateToDutch een verzoek tot vertaling van een woord krijgt laat hij gewoon een dictionary aanmaken. Als een woord niet in de KoenenDictionary voorkomt moet de andere worden geprobeerd. Als hij het woord niet vindt geeft hij dat aan; vindt hij het woord wel, dan geeft hij de vertaling en de bron weer. Helaas kennen de classes geen methode translate(). Koenen zoekt met een methode lookup(String word): String en Kramers met find(String word): String. Je mag de sourcecode en dus de interface van beide classes niet aanpassen.
Voor deze applicatie is al een class diagram gemaakt, waarin het Adapter Pattern is toegepast:

Daarnaast zijn de classes KoenenDictionary en KramersDictionary al gegeven:
public class KoenenDictionary {
private Hashtable words;
/**
* Creates an empty dictionary
*/
public KoenenDictionary() {
words = new Hashtable();
}
/**
* Adds English-Dutch word pairs to dictionary
*/
public void openEnglishDutch() {
words.put("aeroplane", "vliegtuig");
words.put("bicycle", "fiets");
words.put("bird", "vogel");
words.put("boat", "boot");
words.put("car", "auto");
words.put("cat", "kat");
words.put("chicken", "kip");
words.put("cow", "koe");
words.put("dog", "hond");
words.put("donkey", "ezel");
words.put("elephant", "olifant");
words.put("fish", "vis");
words.put("fly", "vlieg");
words.put("fox", "vos");
words.put("horse", "paard");
words.put("lion", "leeuw");
words.put("rabbit", "konijn");
words.put("monkey", "aap");
words.put("mouse", "muis");
words.put("pig", "varken");
words.put("shark", "haai");
words.put("sheep", "schaap");
words.put("snake", "slang");
words.put("tiger", "tijger");
words.put("train", "trein");
words.put("whale", "walvis");
}
/**
* Adds Dutch-English word pairs to dictionary
*/
public void openDutchEnglish() {
words.put("aap", "monkey");
words.put("auto", "car");
words.put("boot", "boat");
words.put("ezel", "donkey");
words.put("fiets", "bicycle");
words.put("haai", "shark");
words.put("hond", "dog");
words.put("kat", "cat");
words.put("kip", "chicken");
words.put("koe", "cow");
words.put("konijn", "rabbit");
words.put("leeuw", "lion");
words.put("muis", "mouse");
words.put("olifant", "elephant");
words.put("paard", "horse");
words.put("schaap", "sheep");
words.put("slang", "snake");
words.put("tijger", "tiger");
words.put("trein", "train");
words.put("varken", "pig");
words.put("vis", "fish");
words.put("vlieg", "fly");
words.put("vliegtuig", "aeroplane");
words.put("vogel", "bird");
words.put("vos", "fox");
words.put("walvis", "whale");
}
/**
* Looks the word up in the dictionary and returns its translation
*
* @param word the word that will be searched in the dictionary
* @return the translation of the word or null if the word is not found
*/
public String lookUp(String word) {
return (String)(words.get(word));
}
}
public class KramersDictionary {
private String[][] list =
{{"aeroplane", "vliegtuig"}, {"bicycle", "fiets"}, {"bird", "vogel"}, {"boat", "boot"},
{"car", "auto"}, {"cat", "kat"}, {"chicken", "kip"}, {"cow", "koe"}, {"dog", "hond"},
{"donkey", "ezel"}, {"elephant", "olifant"}, {"fish", "vis"}, {"fly", "vlieg"}, {"fox", "vos"},
{"goat", "geit"}, {"horse", "paard"}, {"lion", "leeuw"}, {"rabbit", "konijn"},
{"monkey", "aap"}, {"mouse", "muis"}, {"pig", "varken"}, {"sheep", "schaap"},
{"snake", "slang"}, {"submarine", "onderzeeboot"}, {"tiger", "tijger"}, {"train", "trein"}};
/**
* Creates and opens the English-Dutch dictionary
*/
public KramersDictionary() {
}
/**
* Looks the English word up in the dictionary and returns its Dutch translation
*
* @param english the English word that will be searched in the dictionary
* @return the Dutch translation of the word or null if the word is not found
*/
public String find(String english) {
for (int i=0; i<list.length; i++) {
if (english.equals(list[i][0])) {
return list[i][1];
}
}
return null;
}
}
Realiseer op basis van het class diagram de rest van de applicatie.