Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Decorator.

Podobné prezentace


Prezentace na téma: "Decorator."— Transkript prezentace:

1 Decorator

2 Problém Káva Cena House Blend 3.00€ Kenya 1.50€ Decaf Veranda Blend
3.50€ Espresso 2.00€

3 Problém Káva Cena House Blend 3.00€ Kenya 1.50€ Decaf Veranda Blend
3.50€ Espresso 2.00€ Šlehačka Čokoláda Mléko Voda Sojové mléko Mléčná pěna Čokoládový sirup Whiskey

4 „Řešení“ číslo 1 Omezení na podmnožinu
Nemožné vytvořit jakoukoliv kombinaci Co když se změní cena mléka?

5 „Řešení“ číslo 2 Dědičnost

6 „Řešení“ číslo 2 Dědičnost

7 „Řešení“ číslo 3 Supertřída

8 „Řešení“ číslo 3 Supertřída

9 „Řešení“ číslo 3 Supertřída

10 „Řešení“ číslo 3 Supertřída
if (MaMleko()) { cena += 0.10; } if (MaSojoveMleko()) cena += 0.50; if (MaPenu()) cena += 0.25; if (MaCokoladu()) cena += 0.65;

11 „Řešení“ číslo 3 Supertřída
Změna ceny doplňku vynutí změnu celého kódu Přidání doplňku znamená změnu supertřída Co když chceme dvojitou dávku mléka?

12 „Open-Closed“ princip
Třídy by měly být: otevřené pro rozšíření zavřené pro modifikaci Možnost rozšířit funkcionalitu bez nutnosti měnit stávající kód

13 Dědičnost ... je silný nástroj...
ale může vést k neflexibilnímu designu vytváří statické, compile-time rozhodnutí

14 Kompozice stále umožňuje "dědit" chování
umožňuje dynamické, run-time rozhodnutí umožňuje přidat nové chování bez změny stávajícího kódu

15 Kompozice větší flexibilita méně chyb a vedlejších efektů

16 Řešení číslo 4 Finální Espresso Cena()

17 Řešení číslo 4 Finální Postupně přidáváme doplňky/“dekorace“ Espresso
Mléko Cena() Espresso Cena() Postupně přidáváme doplňky/“dekorace“

18 Řešení číslo 4 Finální Decorator a.k.a. Wrapper Espresso Cena() Mléko
Šlehačka Cena() Mléko Cena() Espresso Cena() Decorator a.k.a. Wrapper

19 Řešení číslo 4 Finální Získání finální ceny Cena = 2 Espresso Cena()
Šlehačka Cena() Mléko Cena() Espresso Cena() Cena = 2 Získání finální ceny Cena = <cena vyšší vrstvy> + 0.1 Cena = <cena vyšší vrstvy> + 0.3 Cena()

20 Řešení číslo 4 Finální Získání finální ceny Cena = 2 Espresso Cena()
Šlehačka Cena() Mléko Cena() Espresso Cena() Cena = 2 Získání finální ceny Cena = <cena vyšší vrstvy> + 0.1 Cena = <cena vyšší vrstvy> + 0.3 Cena()

21 Vzor dekorátor ... přidává dodatečné závazky do objektu dynamicky
Dekorátory poskytují flexibilní alternativu k podtřídám pro rozšíření funkcionality

22 Diagram

23 Společný abstraktní předek
Diagram Společný abstraktní předek Abstraktní dekorátor Konkrétní komponenta Konkrétní dekorátor

24 Diagram

25 Kód

26 Kód

27 Kód

28 Vzor dekorátor Můžeme: libovolně kombinovat dekorátory
přidávat více stejných dekorátorů k jedné komponentě

29 Potenciální problémy Pevné hodnoty (ceny) pro určité kombinace neodpovídají ručně vyrobené kombinaci Zaokrouhlování cen Možnost "negativní hodnoty" (odečtu ceny) v dekorátoru

30

31

32 Reálný problém InputStream FileInputStream InputFileLineStream
LineInputStream FileInputStream InputStream InputFileLineStream

33 Reálné využití Grafické toolkity Čtení vstupu, zápis výstupu
Java Swing System.Windows.Controls Čtení vstupu, zápis výstupu System.IO.Stream java.io DataInputStream dis = new DataInputStream( new GzipInputStream( new BufferedInputStream( new FileInputStream("file.gz")))); dis.Read(...);

34 Vestavěná podpora v jazycích
JavaScript TypeScript Python

35 Výhody Vyšší flexibilita pro přidávání funkcionality oproti statickému dědění Transparentnost - programátor stále vidí objekt typu Nápoj Možnost rozšíření - přidávání doplňků Odolnost vůči změnám

36 Nevýhody Komponenta a dekorovaná verze komponentu nejsou identické
Pena(Mleko(Espresso)) == Karamel(Decaf) Pena(Mleko(Espresso)).Cena() != Karamel(Decaf).Cena() Dlouhá řetěz dekorátorů => dopad na výkon Velké množství malých tříd

37 Související vzory Adapter Strategy Composite
Decorator mění pouze chování objektu, ne jeho rozhraní Adapter dá objektu zcela nové rozhraní Composite Decorator je modifikovaný Composite - s jedinou komponentou Decorator přidává dodatečné chování, neagreguje objekty Strategy Decorator mění povrch objektu / Strategy mění vnitřek objektu Komponenta ve Strategy ví o extenzích


Stáhnout ppt "Decorator."

Podobné prezentace


Reklamy Google