# Ú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