Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Návrhové vzory
Návrhový vzor (Design Pattern)
● Šablona, kterou můžete využít pro řešení problému při kódování
● Algoritmy– Řeší konkrétní problémy
● Návrhové vzory– Řeší problémy návrh
Rozdělení DP
● Creational patterns– Řeší dynamická rozhodnutí za běhu programu– Jaký objekt vytvořit a kolik jich vytvořit
● Structural patterns– Řeší strukturu tříd v systému
● Behavioral patterns– Řeší chování/spolupráci objektů
Creational patterns
● Abstract Factory● Builder● Factory Method● Object Pool● Prototype● Singleton
Structural patterns
● Adapter● Bridge● Composite● Decorator● Facade● Flyweight● Proxy
Behavioral patterns
● Chain of responsibility● Command● Interpreter● Iterator● Mediator● Memento● Observer● Visitor
Antipatterny
● Software development antipatterns– Zablokují možnost udržovat nebo rozšiřovat SW
● Software architecture antipatterns– Chyby v logickém návrh SW (míchání v
horizontálním a vertikálním návrhu)
● Project management antipatterns– Chyby ve vedení SW projektů a řízení lidí
Singleton
● Jedináček může být v celém systému pouze jeden – nelze vytvořit více instancí
● Singleton má private konstruktor – nikdo ho nemůže volat a singleton je tak sám zodpovědný, za svou vlastní tvorbu
● Objekty k němu přistupují pomocí veřejné metody getInstance(), která navrací objekt singleton
Singleton (jedináček)
Příklad Singletonu
Použití Singletonu
● Namísto globálních proměnných– Nezabordelí namespace aplikace– Umožňuje lazy initialization, což globální proměnné
neumožňují (okamžitě zaberou výpočetní prostředky)
● Stavové objekty jsou singletony (konečný automat)
● Fasáda je singleton● Logové soubory nebo vyrovnávací servery
Ukázka v jazyce C#
Decorator
● Přidá objektu dynamicky (za běhu) funkcionalitu (zodpovědnost)
● Jedná se o alternativu k podtřídám, narozdíl od dědičnosti však rozšiřuje funkcionalitu objektu a ne celé třídy
● Př: Okno průzkumníku souborů – možná chce uživatel scrollovat jen vertikálně nebo jen horizontálně nebo obojí. Můžeme dle jeho preference nechat za běhu takové okno vygenerovat