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.
01.
/**
02.
* Priklad pro navrhovy vzor Multiton
03.
* @author Pavel Micka
04.
*/
05.
class
Number{
06.
/**
07.
* Holder na cisla 0-9
08.
*/
09.
private
static
final
Number[] numbers =
new
Number[
10
];
10.
/**
11.
* Hodnota cisla
12.
*/
13.
private
int
value;
14.
/**
15.
* Konstruktor
16.
* @param nr hodnota cisla
17.
*/
18.
private
Number(
int
nr) {
19.
this
.value = nr;
20.
}
21.
/**
22.
* Vrati instanci cisla
23.
* 0-9 multiton, ostatni nova instance
24.
* @param nr cislo, ktere ma byt vraceno
25.
* @return cislo
26.
*/
27.
public
static
Number getInstance(
int
nr){
28.
if
(nr >=
10
)
return
new
Number(nr);
29.
else
{
30.
synchronized
(Number.
class
){
31.
if
(numbers[nr] ==
null
) numbers[nr] =
new
Number(nr);
32.
return
numbers[nr];
33.
}
34.
}
35.
}
36.
/**
37.
* Vrati hodnotu cisla
38.
* @return hodnota cisla
39.
*/
40.
public
int
getValue(){
41.
return
value;
42.
}
43.
}
Literatura
- PECINOVSKÝ, Rudolf. Návrhové vzory. 1. vyd. [s.l.] : Computer press, 2007. 527 s. ISBN 978-80-2511582-4.