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.