Návrhový vzor Multiton je obdobou návrhového vzoru Singleton. Zásadní rozdíl spočívá v tom, že zatímco u Singletonu existuje pouze jediná instance třídy, u Multitonu existuje jedna instance pro každý klíč (každý rozlišitelný stav). Výhodou tohoto přístupu jsou nižší nároky na pamět a vytvoření vždy jen jedné instance pro každý stav (vytváření může být nákladné).


Příklad

Mějme třídu, která reprezentuje čísla. Protože víme, že se používají především čísla 0-9, tak na tato čísla použijeme vzor Multiton, abychom ušetřili místo v paměti.

/**
 * Priklad pro navrhovy vzor Multiton
 * @author Pavel Micka
 */
class Number{
    /**
     * Holder na cisla 0-9
     */
    private static final Number[] numbers = new Number[10];
    /**
     * Hodnota cisla
     */
    private int value;
    /**
     * Konstruktor
     * @param nr hodnota cisla
     */
    private Number(int nr) {
        this.value = nr;
    }
    /**
     * Vrati instanci cisla
     * 0-9 multiton, ostatni nova instance
     * @param nr cislo, ktere ma byt vraceno
     * @return cislo
     */
    public static Number getInstance(int nr){
        if(nr >= 10) return new Number(nr);
        else{
            synchronized(Number.class){
                if(numbers[nr] == null) numbers[nr] = new Number(nr);
                return numbers[nr];
            }
        }
    }
    /**
     * Vrati hodnotu cisla
     * @return hodnota cisla
     */
    public int getValue(){
        return value;
    }
}

Literatura

  • PECINOVSKÝ, Rudolf. Návrhové vzory. 1. vyd. [s.l.] : Computer press, 2007. 527 s. ISBN 978-80-2511582-4.







Doporučujeme