Übung 10 - ST II ENTWURFSMUSTER ENTWURFSMUSTER ZUR FLEXIBILISIERUNG 1. Java bietet im Package java.util die Klasse Hashtable an, die einen assoziativen Speicher realisiert. In dieser Klasse wird die von Object geerbte Methode clone() überdefiniert, die ein neues Hashtable-Objekt als Ergebnis liefert. Das neue Hashtable-Objekt enthält alle diejenigen Objekte die auch das ursprüngliche Objekt enthält. Die clone()-Methode ist ausgesprochen rechenintensiv. Das Klonen von Hashtable-Objekten erscheint in multithreaded Programmen immer dann sinnvoll, wenn man in einer großen Hashtabelle verschiedenen Schlüssel/Wert-Paare finden möchte und deshalb für den Suchzeitraum exklusiven Zugriff (nur Lesen) benötigt. Ein Sperren der Hashtabelle mittels synchronized() erscheint dafür als ungeeignet. Das Klonen vermeidet das lange Sperren der Hashtabelle. Da aber das Klonen sehr rechenintensiv ist, erscheint es sinnvoll immer nur dann zu klonen, wenn die Notwendigkeit dafür gegeben ist (z.B. bei Modifikation der Hashtabelle aus einem anderen Thread heraus). Mit welchem Entwurfsmuster läßt sich dieses Problem lösen? Erläutern Sie die allgemeine Struktur des gewählten Musters sowie die konkrete Anwendung für das Problem! 2. Bei der Realisierung eines Programms in Java möchten Sie auf eine andere, bereits existierende Implementierung eines assoziativen Speichers zurückgreifen. Der Nachteil dieser Implementierung liegt allerdings darin, daß nicht die allgemeine Schnittstelle von Java für assoziative Speicher (Dictionary) unterstützt wird. Mit Hilfe welches Entwurfsmusters können Sie dieses Problem lösen? Diskutieren Sie Lösungsvarianten in Abhängigkeit von der zur Verfügung stehenden Implementierung des assoziativen Speichers. 3. Ein Java-Programm verwaltet Objekte in einem Array. Zur Sortierung der Objekte erwartet das Java-Programm (Klient) ein Objekt einer Klasse, das eine Operation mit folgender Signatur besitzt: void sort(array:Object[]); Sortiert wird dabei jeweils nach dem von der Methode Object::hashCode() gelieferten Wert. Die Operation sort() wird mehrfach im Java-Programm aufgerufen. Es soll dabei möglich sein den Sortierungsalgorithmus, auch zur Laufzeit, abzuändern (z.B. InsertSortAufsteigend, InsertSort-Absteigend, BubbleSort-Aufsteigend, BubbleSort-Absteigen, keine Sortierung, ...), bei gleichbleibender Signatur der Operation sort(). Lösen Sie dieses Problem unter Verwendung von in der Vorlesung vorgestellten Entwurfsmustern. Überprüfen Sie Ihre Lösung auf Lösungsideen die man in Form von Entwurfsmustern beschreiben könnte. Seite 1/1 Technische Universität Dresden Softwaretechnologie Softwaretechnologie II, Übungsmaterial