AI generovaný přehled + nějaké mé poznámky k opakování
Základní zdroje
Knihy
- "Design Patterns: Elements of Reusable Object-Oriented Software" – Gang of Four (GoF)
- Klasická „bible“ návrhových vzorů
- Popisuje 23 základních návrhových vzorů
- "Head First Design Patterns"
- Velmi přívětivý úvod do návrhových vzorů
- Vhodný pro začátečníky
- "Refactoring to Patterns" – Joshua Kerievsky
- Zaměřený na přechod z kódu bez návrhových vzorů na kód s nimi
- "Patterns of Enterprise Application Architecture" – Martin Fowler
- Více enterprise vzorů a architektur
Online zdroje
- Refactoring.Guru https://refactoring.guru/design-patterns
- Výborný online návod s ilustracemi a příklady v různých jazycích
- Vysvětlení včetně diagramů a kódu
- Design Patterns in Java https://www.geeksforgeeks.org/system-design/java-design-patterns/
- Stručné příklady v Javě
- GeeksforGeeks – Design Patterns https://www.geeksforgeeks.org/system-design/software-design-patterns/
- Shrnutí a příklady v různých jazycích
- Wikipedia – Design Pattern https://en.wikipedia.org/wiki/Software_design_pattern
- Vhodné pro rychlé připomenutí
Kurzy a videa
- Udemy – "Design Patterns in Java"
- Coursera – "Software Architecture & Design"
- YouTube – "Design Patterns Explained" (mnoho kanálů)
Doporučení ke studiu
- Používej konkrétní příklady – nejen teoretické popisy
- Implementuj vzory vlastním kódem – např. v Pythonu nebo Javě
- Zkoušej použít vzory v reálných projektech
- Nauč se rozpoznat situace, kdy se použije daný vzor
- Zkoumej, jaké jsou nevýhody použití daného vzoru
- Neplňuj si kód všemi vzory najednou – používej jen tam, kde to má smysl
- Zkoumej, jak se návrhové vzory liší mezi jazyky (např. v Pythonu se některé vzory implementují jinak než v Javě)
Základní pojmy
Imperativní vs deklarativní jazyk
- Imperativní jazyk: Popisuje, jak se má něco provést (krok za krokem)
- Deklarativní jazyk: Popisuje, co se má provést (co má být výsledkem)
Mnemotechnická pomůcka
- Imperativní = Instrukce
- Deklarativní = Definice
Rozdíl mezi "Good practice" a návrhovým vzorem
| Aspekt | Good Practice | Návrhový vzor |
|---|---|---|
| Definice | Obecná praxe | Formální řešení |
| Použití | Všeobecně | Konkrétní problémy |
| Struktura | Neformální | Formální |
| Příklady | KISS, čitelnost | Factory, Strategy, Observer |
Typy návrhových vzorů
Creational (tvůrčí)
- Factory Method: Vytváří objekty bez explicitního určení konkrétní třídy
- Abstract Factory: Vytváří rodiny souvisejících nebo závislých objektů
- Builder: Odděluje konstrukci složitého objektu od jeho reprezentace
- Prototype: Vytváří nové objekty kopírováním existující instance
- Singleton: Zajišťuje, že třída má pouze jednu instanci
Structural (strukturální)
- Adapter: Přizpůsobuje rozhraní jedné třídy rozhraní očekávanému
- Bridge: Odděluje abstrakci od implementace
- Composite: Skládá objekty do stromové struktury pro reprezentaci částí celku
- Decorator: Dynamicky přidává objektům nové funkce
- Facade: Poskytuje jednoduché rozhraní pro složitý subsystém
- Flyweight: Sdílí co nejvíce dat mezi mnoha podobnými objekty
- Proxy: Poskytuje zástupce místo skutečného objektu
Behavioral (chování)
- Chain of Responsibility: Předává požadavek řetězcem objektů, dokud ho někdo nezpracuje
- Command: Zapouzdřuje požadavek jako objekt
- Interpreter: Definuje gramatiku jazyka a interpretuje věty v tomto jazyce
- Iterator: Poskytuje způsob sekvenčního přístupu k prvkům kolekce
- Mediator: Centralizuje komunikaci mezi objekty
- Memento: Ukládá interní stav objektu bez porušení inkapsulace
- Observer: Definuje závislost jednoho objektu na druhém
- State: Mění chování objektu při změně jeho vnitřního stavu
- Strategy: Definuje rodinu algoritmů a umožňuje jejich záměnu
- Template Method: Definuje kostru algoritmu a deleguje kroky na podtřídy
- Visitor: Přidává nové operace bez změny tříd objektů
Otázky k zamyšlení
- Jaké znáš návrhové vzory pro neobjektové jazyky a jak se liší návrhový vzor od good practice?
- Co je imperativní a deklarativní jazyk a znáš mnemotechnickou pomůcku?
- Jaký je rozdíl mezi Factory a Abstract Factory pattern?
- Jaké jsou nejčastější chyby při implementaci návrhových vzorů?
- Jaký je rozdíl mezi návrhovými vzory a architektonickými vzory?
- Jak se návrhové vzory vztahují k principům SOLID?
- Jaké jsou nejčastější případy použití návrhových vzorů v praxi?
- Jaké jsou nejčastější návrhové chyby začátečníků?
- Jaký je vztah mezi návrhovými vzory a testovatelností kódu?
- Jaké jsou nejčastější problémy při používání návrhových vzorů v distribuovaných systémech?