Simple factory method (jednoduchá (statická) tovární metoda) je návrhový vzor, který je alternativou volání konstruktoru, jemuž se za určitých okolností chceme vyhnout.
Hlavní nevýhodou volání konstruktoru je nevyhnutelná konstrukce nového objektu. Můžeme například chtít pracovat pouze s jednou instancí v rámci celé aplikace (tzv. Singletonem) a očekáváme, že dostaneme buď nový objekt (pokud žádná instance neexistuje), nebo při každém dalším volání onu jednu a tu samou instanci.
Tento vzor také použijeme v situaci, kdy nechceme být omezeni pouze na konstrukci konkrétního typu objektu, ale chceme mít možnost vracet také jeho podtypy (potomky).
Příklad
Třída zaměstnanec při zavolání tovární metody vrátí novou instanci - tou může být kterýkoliv z potomků třídy zaměstnanec (ředitel, uklízečka, sekretářka).
01.
/**
02.
* Priklad pro navrhovy vzor Simple factory method
03.
* @author Pavel Micka
04.
*/
05.
abstract
class
Employee {
06.
/**
07.
* Vrati nahodneho (noveho) zamestnance firmy
08.
* @return
09.
*/
10.
public
static
Employee getEmployee() {
11.
Random r =
new
Random(System.currentTimeMillis());
12.
int
random = r.nextInt(
3
);
// <0;3)
13.
if
(random ==
0
)
return
new
Director();
14.
else
if
(random ==
1
)
return
new
Secretary();
15.
else
return
new
CleaningWoman();
16.
}
17.
/**
18.
* Vrati pozdrav s informaci o zamestnani
19.
* @return pozdrav
20.
*/
21.
public
abstract
String sayHello();
22.
23.
private
static
class
Director
extends
Employee {
24.
@Override
25.
public
String sayHello() {
26.
return
"Ahoj, ja jsem reditel a beru ze vsech nejvyssi plat"
;
27.
}
28.
}
29.
private
static
class
Secretary
extends
Employee {
30.
@Override
31.
public
String sayHello() {
32.
return
"Cau, ja jsem sekretarka a umim varit dobre kafe"
;
33.
}
34.
}
35.
private
static
class
CleaningWoman
extends
Employee {
36.
@Override
37.
public
String sayHello() {
38.
return
"Ja jsem uklizecka a jako jedina tu skutecne pracuji..."
;
39.
}
40.
}
41.
}
Literatura
- PECINOVSKÝ, Rudolf. Návrhové vzory. 1. vyd. [s.l.] : Computer press, 2007. 527 s. ISBN 978-80-2511582-4.