mini|UML-Diagramm eines Multitons Das Multiton () ist in der Informatik ein Erzeugungsmuster, das zur Erzeugung einer bestimmten Anzahl von Objekten verwendet wird. Die Gang of Four nennt es Fliegengewicht (englisch flyweight). Es ist wie eine Erweiterung des Singleton, wo nur ein einziges Objekt verwendet wird. Um auf das richtige Objekt zuzugreifen, wird ein eindeutiger Schlüssel verwendet. Die Objekte und deren Schlüssel werden meist als assoziatives Datenfeld in Form von Schlüsseln und Werten umgesetzt, die über eine statische Methode auf Wunsch geliefert werden. So gibt es immer für jeden Schlüssel höchstens ein Objekt. Wird ein Schlüssel angegeben, für das das Objekt nicht existiert, wird das benötigte Objekt erzeugt und zur Verfügung gestellt. Dadurch ist ein Multiton eigentlich nichts anderes als eine Gruppe von Einzelstücken.

Beispiel

Eine thread-sichere Implementierung eines Multitons in Java:

public class FooMultiton { private static final Map<Object, FooMultiton> instances = new HashMap<Object, FooMultiton>();

private FooMultiton() /* also acceptable: protected, {default} */ { // ...

public static FooMultiton getInstance(Object key) { synchronized (instances) {

// Zu key gehörige Instanz aus Map holen FooMultiton instance = instances.get(key);

if (instance == null) { // Lazy Creation, falls keine Instanz gefunden instance = new FooMultiton();

instances.put(key, instance);

return instance;

// Weitere Felder und Methoden ... }

Im Unterschied zu einer Hashtabelle liefert ein Multiton immer ein Objekt zurück; null wird also nie zurückgegeben. Klienten können auch keine neuen Schlüssel festlegen. Es lässt zentralisierten Zugriff auf ein einziges Verzeichnis zu. Es läuft aber im Unterschied zu anderen Lösungen der indizierten Speicherung (wie z. B. LDAP) auf einem einzigen System.

Nachteile Unittests eines Multitons sind wie bei dem Singleton schwierig, weil globale Variablen verwendet werden.googletesting.blogspot.com Es kann auch zu Speicherlecks führen, wenn die Sprache Garbage Collection verwendet, da hierbei global starke Referenzen zu den Objekten gehalten werden.

Weblinks

Multiton implementation in Ruby language Multiton usage in PureMVC Framework for ActionScript 3 C# Multiton implementation, example of use, and discussion of memory issues

Einzelnachweise

Kategorie:Entwurfsmuster Kategorie:Erzeugungsmuster