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 |