návrhové vzory · návrhový vzor (design pattern) Šablona, kterou můžete využít pro...

Post on 27-Jul-2020

9 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related