Multiton Pattern Beispiel und Test

Multiton / Nton

Das Multiton Pattern

Dieses Beispiel zeigt die Implementierung des Nton bzw. Multiton Patterns. Dadurch können innerhalb einer Anwendung eine definierte Anzahl von Instanzen einer bestimmten Klasse instanziert werden. Jeder Aufruf der getInstance-Methode wird mit einer der verfügbaren Instanzen im Round-Robin-Prinzip serviert. Die Anzahl der Instanzen, welche für die Anwendung verfügbar sind, ist konfigurierbar.

Das Multiton Designpattern ist sehr ähnlich zu dem des Singletons. Im Wesentlichen stellt ein Multiton die Funktionalität einer Gruppe bzw. Liste von Singletons zur Verfügung.

Implementierung

Folgendermaßen wird die Implementierung des Multiton Patterns realisiert:

package at.gridtec.multiton;

import java.util.ArrayList;
import java.util.List;

public class Multiton {

    private static final int NUM_OF_INSTANCES = 5;
    private static final List<Multiton> instanceList = new ArrayList<Multiton>(); 
    private static int instanceCount = 0;
    private int instanceNum;

    private Multiton() {

    }

    public static synchronized Multiton getInstance() {

        Multiton instance = null;

        if (instanceList.size() == NUM_OF_INSTANCES) {
            instance = instanceList.get(instanceCount % NUM_OF_INSTANCES);
        } else {
            instance = new Multiton();
            instance.instanceNum = instanceList.size() + 1;
            instanceList.add(instance);
        }

        instanceCount++;
        return instance;
    }


    public int getInstanceNum() {
        return instanceNum;
    }

    /**
     * for testing purposes
     */
    public String toString() {
        return "Multiton Number: " + getInstanceNum();
    }

}

Test

Mit folgendem Testfall kann der Multiton getestet werden:

package at.gridtec.multiton;

public class MutlitonTest {

    public static void main(String args[]) {
        for (int i = 0; i < 25; i++) {
            System.out.println(Multiton.getInstance());
            if (Multiton.getInstance().getInstanceNum() > 5) {
                break;
            }
        }
    }
    
}

Der zuvor gezeigte Testfall erzeugt folgende Ausgabe:

//    Multiton Number: 1
//    Multiton Number: 3
//    Multiton Number: 5
//    Multiton Number: 2
//    Multiton Number: 4
//    Multiton Number: 1
//    Multiton Number: 3
//    Multiton Number: 5
//    Multiton Number: 2
//    Multiton Number: 4
//    Multiton Number: 1
//    Multiton Number: 3
//    Multiton Number: 5
//    Multiton Number: 2
//    Multiton Number: 4

Vorteile

Als Weiterentwicklung des Singleton Patterns, können mit dem Multiton Pattern gleich mehrere Instanzen global verwaltet werden. Dabei kann die Anzahl dieser Instanzen beim Start der Applikation festgelegt oder sogar zur Laufzeit verändert werden, je nach Implementierung. Somit ist die Anzahl der Instanzen auch noch variierbar.

Wie auch beim Singleton ist das Multiton Pattern, je nach Implementierung, thread-safe. Trotz der unterschiedlichen Instanzen, ist auch mit diesem Pattern eben solch eine thread-safe Implementierung umsetzbar. Dabei gelten die gleichen Implementierungen wie beim Singleton Pattern. Da es im Singleton Pattern kein Verwalten mehrerer Instanzen gibt, empfiehlt es sich beim Multiton Pattern eine synchronisierte Collection für die einzelnen Instanzen zu verwenden.

Nachteile

Ein großer Nachteil dieses Patterns ist, ähnlich wie beim Singleton Pattern, dass das Testen der einzelnen Instanzen nur schwer möglich ist. Das liegt vor allem an der Natur des Multiton Patterns, da es globale Variablen in eine Applikation bringt.

Durch eben diese globale Variablen müssen entsprechend starke Referenzen auf die einzelnen Instanzen gehalten werden. Somit ist es unter Umständen möglich, dass in Garbage Collector basierten Sprachen, wie zum Beispiel Java, Speicherlecks (Memory Leaks) entstehen können.

Tagged with:     , ,

About the author /


Einst gelernter Werkzeugbautechniker, habe ich vor etlichen Jahren mein Leben der Informatik verschrieben. Zur Zeit studiere ich noch Informatik auf der Fachhochschule Technikum Wien und beschäftige mich am liebsten mit Java, Android und Elektronik.

Related Articles

Post your comments

Your email address will not be published. Required fields are marked *

*

Unterstütz uns!

Folgt uns!

Diese Seite

wurde erstellt mit Ehrgeiz, Liebe und viel Koffein. Bei der Erstellung kamen keine jar-Dateien zu Schaden. Das Logo wurde erstellt von Star-seven.at.