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).
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 | ||||
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 |