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.