Null Object (Prázdný objekt) je navrhový vzor, který slouží k eliminaci testů na prázdnotu ukazatele, jež často zaplevelují rozhodování v aplikaci. Null Object je platný objekt daného typu, který použijeme na místo prázdné reference a nevykonává při volání svých metod žádnou akci.
Příklad
Jednoduchý školní systém docházek. V případě, že žák nepřijde na hodinu a je mu méně než 18 let, dojde k informování rodičů pomocí SMS a e-mailu. Pokud je žákovi více jak 18 let, tak rodiče informováni nebudou.
01.
/**
02.
* Interface pro sluzbu kontaktovani rodicu
03.
* @author Pavel Micka
04.
*/
05.
interface
ParentContacterIface{
06.
/**
07.
* Posle email
08.
*/
09.
public
void
sendEmail();
10.
/**
11.
* Posle SMSku
12.
*/
13.
public
void
sendSMS();
14.
}
15.
16.
/**
17.
* Slouzi pro kontaktovani rodicu studentu, kterym jeste nebylo 18
18.
* @author Pavel Micka
19.
*/
20.
class
DefaultParentContacter
implements
ParentContacterIface{
21.
public
void
sendEmail() {
22.
System.out.println(
"Posilam e-mail mamince: Vase dite neprislo do skoly?!"
);
23.
}
24.
public
void
sendSMS() {
25.
System.out.println(
"Posilam SMS tatinkovi: Pripravte remen!"
);
26.
}
27.
}
28.
29.
/**
30.
* Slouzi jako Null Object pro studenty, jimz uz bylo 18 (neprovadi zadne akce)
31.
* Kdyby tento objekt neexistoval, tak by bylo zapotrebi pri kazdem rozhodnuti
32.
* o informovani rodicu testovat, zda-li nema zak NULLovy ParentContacter
33.
*
34.
* Bezna implementace
35.
* IF user.prisel_pozde() && user.contacter != null -> user.contacter.sendEmail()
36.
*
37.
* Takto
38.
* IF user.prisel_pozde() -> user.contacter.sendEmail()
39.
*
40.
* @author Pavel Micka
41.
*/
42.
class
NullParentContacter
implements
ParentContacterIface{
43.
public
void
sendEmail() {
44.
//DO NOTHING
45.
}
46.
public
void
sendSMS() {
47.
//DO NOTHING
48.
}
49.
}
Literatura
- PECINOVSKÝ, Rudolf. Návrhové vzory. 1. vyd. [s.l.] : Computer press, 2007. 527 s. ISBN 978-80-2511582-4.