Multiton

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
UML-Diagramm eines Multitons

Das Multiton (englisch multiton) ist ein Erzeugungsmuster, das zur Erzeugung einer bestimmten Anzahl von Objekten verwendet wird. Es ist sozusagen eine Erweiterung des Einzelstücks, 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üssel und Werten umgesetzt, die über eine statische Methode auf Wunsch geliefert werden. Somit 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. Somit ist ein Multiton eigentlich nichts anderes als eine Gruppe von Einzelstücken.[1]

Beispiel[Bearbeiten]

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 neue 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[Bearbeiten]

Unittests eines Multitons sind wie bei dem Einzelstück schwierig, weil globale Variablen verwendet werden.[2] Es kann auch zu Speicherlecks führen, wenn die Sprache Speicherbereinigung unterstützt.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Richard Carr: Multiton Design Pattern. BlackWasp, 3. März 2012, archiviert vom Original am 3. März 2012, abgerufen am 21. September 2012 (HTML, englisch): „The multiton design pattern is very similar to the singleton. When a request is made for an object, a key is passed to a static method that will generate or return one. If the key has not been used before, a new object is instantiated, linked to the key and returned. If the key has been used before, the object previously linked to that key is returned. Essentially, the multiton provides the functionality of a group of singletons.“
  2. http://googletesting.blogspot.com/2008/11/clean-code-talks-global-state-and.html