Úvod

Návrhové vzory

SSŠVT


Úvod

Co jsou to návrhové vzory?

Informatika (computer science) se začala rozvíjet s prvními počítači. Řekněme od poloviny minulého století. Zpočátku to bylo hodně o matematice, později se od matematiky trochu oddělila.

Jak vznikalo stále více a více programů, všimli si programátoři, že některé věci dělají stále dokola. Pořád zpracovávali pole prvků v nějakém cyklu. Často potřebovali pracovat se sadou údajů jako celkem (data nějaké entity). Jeden program čekal na to, až se něco stane, a pak na to nějakým způsobem zareagoval. A podobně.

Vývoj software a hlavně interaktivních aplikací se hodně posunul dopředu s nástupem objektově orientovaného programování (OOP). Některé opakující se problémy a neumělé postupy vyřešil právě objektový přístup. Jiné přetrvávaly nadále.

V polovině 90. let 20. století přišli čtyři programátoři a teoretici informatiky Erich Gamma, Richard Helm, Ralph Johnson a John Vlissides (tzv. Gang of Four neboli GoF) s knihou Design Patterns: Elements of Reusable Object-Oriented Software, ve které shrnuli nejčastěji se opakující problémy a úlohy v programování do tzv. návrhových vzorů (design patterns).


Kategorizace

Systematické rozdělení návrhových vzorů shrnuje následující tabulka. (Odkazy vedou na detaily v této dokumentaci.)

Účel
Vytvoření (creational) Struktura (structural) Chování (behavioral)
Rozsah použití Třída Factory Method Adapter (class) Interpreter
Template Method
Objekt Abstract Factory Adapter (object) Chain of Responsibility
Builder Bridge Command
Prototype Composite Iterator
Singleton Decorator Mediator
Facade Memento
Flyweight Observer
Proxy State
Strategy
Visitor

Přehled

Další tabulka stručně vysvětluje každý návrhový vzor. (Tabulka obsahuje externí odkazy na články z Wikipedie.)

Návrhový vzor Český název Popis
Abstract Factory Abstraktní továrna Interface pro vytváření rodin souvisejících nebo závislých objektů, aniž bychom specifikovali konkrétní třídy
Adapter Adaptér Převádí rozhraní nějaké třídy na jiné rozhraní, které očekává ten, kdo třídu používá (klientský kód)
Bridge Most Oddělení abstrakce od její implementace
Builder Builder Odděluje konstrukci složitého objektu od jeho reprezentace
Chain of Responsibility Zřetězení zodpovědnosti Oddělení odesílatele požadavku od jeho příjemce dává možnost dalším objektům na požadavek reagovat
Command Command Zapouzdření požadavku v objektu tak, aby bylo možné parametrizovat klienty různými požadavky
Composite Composite Spojování objektů do stromových struktur reprezentujících hierarchie typu část-celek (part-whole)
Decorator Dekorátor Dynamicky přidává k objektu další funkcionalitu, je alternativou k podtřídám
Facade Fasáda Jednotné rozhraní k sadě rozhraní v nějakém subsystému
Factory Method Tovární metoda Definuje rozhraní pro vytvoření objektu, ale to, ze které třídy vytvoříme instanci, nechává rozhodnout své podtřídy
Flyweight Muší váha Používá sdílení, aby bylo možné efektivně podporovat velké množství jemně odlišných objektů
Interpreter Interpreter Souvisí s formální gramatikou a formálními jazyky (např. programovacími), definuje reprezentaci gramatiky a interpreter, který interpretuje věty daného formálního jazyka
Iterator Iterátor Sekvenční přístup k elementům agregovaného objektu (např. kolekce)
Mediator Prostředník Objekt zapouzdřující způsob interakce mezi sadou jiných objektů, zamezuje, aby objekty komunikovaly napřímo
Memento Memento Zachycuje a externalizuje interní stav nějakého objektu, aby bylo později možné objekt "zrekonstruovat" do jeho současného stavu
Observer Observer Definuje vztah one-to-many mezi objekty tak, že když se jeden objekt (one) změní, uvědomí (notifikuje) o tom ostatní (many)
Prototype Prototyp Pro objekty stejného nebo podobného typu se vytvoří jeden objekt, ze kterého se kopírováním vytvářejí další instance
Proxy Proxy Zastupuje jiný objekt, který je skrze tohoto zástupce řízen (ovládán)
Singleton Singleton Jediná instance určité třídy, dostupná z globálně definovaného místa
State Stav Změna interního stavu objektu vyvolá změnu jeho chování tak, že pro tuto transformaci využijeme jinou třídu
Strategy Strategy Rodina algoritmů zapouzdřených tak, aby bylo snadné vyměnit jeden za druhý, aniž by to jakkoliv ovlivnilo klienta, který algoritmus používá
Template Method Šablona metody Definuje se kostra algoritmu, přičemž některé kroky definují až odvozené třídy
Visitor Visitor Operace, která se má provést na prvcích objektové struktury