AI generovaný přehled + nějaké mé poznámky k opakování


Základní zdroje

Knihy

  1. "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ů
  2. "Head First Design Patterns"
    • Velmi přívětivý úvod do návrhových vzorů
    • Vhodný pro začátečníky
  3. "Refactoring to Patterns" – Joshua Kerievsky
    • Zaměřený na přechod z kódu bez návrhových vzorů na kód s nimi
  4. "Patterns of Enterprise Application Architecture" – Martin Fowler
    • Více enterprise vzorů a architektur

Online zdroje

    • Výborný online návod s ilustracemi a příklady v různých jazycích
    • Vysvětlení včetně diagramů a kódu
    • Stručné příklady v Javě
    • Shrnutí a příklady v různých jazycích
    • Vhodné pro rychlé připomenutí

Kurzy a videa

  1. Udemy – "Design Patterns in Java"
  2. Coursera – "Software Architecture & Design"
  3. YouTube – "Design Patterns Explained" (mnoho kanálů)

Doporučení ke studiu

  1. Používej konkrétní příklady – nejen teoretické popisy
  2. Implementuj vzory vlastním kódem – např. v Pythonu nebo Javě
  3. Zkoušej použít vzory v reálných projektech
  4. Nauč se rozpoznat situace, kdy se použije daný vzor
  5. Zkoumej, jaké jsou nevýhody použití daného vzoru
  6. Neplňuj si kód všemi vzory najednou – používej jen tam, kde to má smysl
  7. 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í

  1. Jaké znáš návrhové vzory pro neobjektové jazyky a jak se liší návrhový vzor od good practice?
  2. Co je imperativní a deklarativní jazyk a znáš mnemotechnickou pomůcku?
  3. Jaký je rozdíl mezi Factory a Abstract Factory pattern?
  4. Jaké jsou nejčastější chyby při implementaci návrhových vzorů?
  5. Jaký je rozdíl mezi návrhovými vzory a architektonickými vzory?
  6. Jak se návrhové vzory vztahují k principům SOLID?
  7. Jaké jsou nejčastější případy použití návrhových vzorů v praxi?
  8. Jaké jsou nejčastější návrhové chyby začátečníků?
  9. Jaký je vztah mezi návrhovými vzory a testovatelností kódu?
  10. Jaké jsou nejčastější problémy při používání návrhových vzorů v distribuovaných systémech?