# Úvod
Za viac ako 50 rokov histórie objektovo orientovaného programovania šikovní inžinieri prišli na to, že mnoho problémov sa dá riešiť skupinou podobných riešení a postupov, resp. väčšie riešenia sa dajú rozbiť na malé z tejto skupiny.
Návrhové vzory (angl. design patterns
) sú všeobecné, znovapoužiteľné riešenia na bežné a opakujúce sa problémy a výzvy v softvérovom návrhu a architektúre. Sú to formalizované osvedčené postupy a sami o sebe sú abstraktné. Ich konkrétna implementácia v rôznych jazykoch sa môže líšiť podľa obmedzení, resp. ich unikátnych vlastností.
Prečo je však dôležité tieto vzory poznať a používať? Tu sú niektoré z hlavných dôvodov:
- Lepšia orientácia v kóde. Každý programuje rôzne, na veci hľadíme inak. Preto nám používanie všeobecne známych postupov umožnuje rýchlejšie sa zorientovať v cudzom kóde a pochopiť autorovu myšlienku. Pamätajte - píšeme kód pre iných ľudí, nie pre počítače.
- Overené postupy, ktoré fungujú. Pri vytváraní vlastného kódu sa môže stať, že v ňom ostanú skryté nedostatky, ktoré sa prejavia až neskôr. Návrhové vzory boli a sú použité v mnohých malých či veľkých systémoch, na základe čoho vieme, že sa na ne môžeme spoľahnúť.
- Kvalitnejší kód. Vymyslieť novú architektúru a spôsoby riešenia problémov si okrem skúseností vyžaduje aj veľa času a analýzy, niečo, na čo častokrát nie sú vyhradené zdroje. Použitím rokmi testovaných a starostlivo ladených vzorov sa vyhneme tomu, aby sme písali kód, ktorý sa môže ukázať ako nekvalitný.
Poznámka
Je dôležité spomenúť, že používanie návrhových vzorov samo o sebe nezaručuje kvalitu kódu. Dobrý softvérový inžinier musí vedieť, kedy sa ktorý vzor hodí a kedy naopak nie. Existujú situácie, kde vlastné riešenie môže byť podstatne efektívnejšie. Preto je nutné pristupovať ku každému problému osobitne.
# Kategórie návrhových vzorov
Pre lepšiu organizáciu, návrhové vzory klasifikujeme do niekoľkých kategórií podľa použitia - štrukturálne (structural
), kreačné (creational
) a behaviorálne (behavioral
). Podľa zdroja môžu existovať aj ďalšie kategórie, napr. konkurenčné či architekturálne vzory; tým sa však v rámci tejto zbierky venovať nebudeme. Taktiež berte na vedomie, že tento list nie je úplný - podľa zdroja existuje mnoho ďalších vzorov, ktoré sme nespomenuli. Vybrali sme len tie, ktoré považujeme za najdôležitejšie a najčastejšie používané v praxi.
Poznámka
Názvy návrhových vzorov sme sa podľa možnosti snažili poslovenštiť tam, kde zneli podobne v oboch jazykoch. Nepoužívame však výraznejšie preklady (napr. builder -> staviteľ), nakoľko budete v praxi pracovať len s anglickými názvami a chceme, aby ste ich po práci so zbierkou rozoznali ihneď a nepotrebovali sa v nich dodatočne oboznamovať. V rámci jednotlivých kapitol však uvádzame aj slovenské preklady.
# Štrukturálne vzory
Začneme návrhovými vzormi, ktoré popisujú rôzne spôsoby ako štruktúrovať a kombinovať jednotlivé objekty v našich projektoch. Sú to nasledovné:
- Nemennosť (Immutability)
- POJO - Plain Old Java Object
- Value Object
- Marker
- Adaptér
- Fasáda
- Dekorátor
- Proxy
# Kreačné vzory
Táto kategória zoskupuje vzory mechanizmov, ktoré riešia vytváranie objektov v rôznych situáciách. Ich cieľom je zjednodušiť, skryť či zovšeobecniť častokrát repetetívne a zdĺhavé kroky potrebné k vytvoreniu inštancie komplexnejších objektov. Bližšie sa pozrieme na nasledovné vzory:
- Builder
- Factory
- Prototyp
- Dependency injection
- Singleton
# Behaviorálne vzory
Behaviorálne vzory identifikujú bežné vzory správania sa programov a snažia sa ich formalizovať pre ich efektívnejšie a flexibilnejšie využitie.
- Nulový objekt
- Template metóda
- Stratégia
- Observer
- Chain of responsibility