15
Decorator (design pattern) Bc. Martin Petruň 16.10.2012 SAI

Decorator (design pattern)

Embed Size (px)

DESCRIPTION

Decorator (design pattern). Bc. Martin Petru ňa 16 .10.2012 SAI. Zaradenie. Prototype patrí medzi štrukturálne návrhové vzory Schéma:. Zaradenie. Prototype patrí medzi štrukturálne návrhové vzory Schéma:. Účastníci. - PowerPoint PPT Presentation

Citation preview

Page 1: Decorator  (design pattern)

Decorator (design pattern)

Bc. Martin Petruňa16.10.2012

SAI

Page 2: Decorator  (design pattern)

Zaradenie

• Prototype patrí medzi štrukturálne návrhové vzory

• Schéma:

Page 3: Decorator  (design pattern)

Zaradenie

• Prototype patrí medzi štrukturálne návrhové vzory

• Schéma:

Page 4: Decorator  (design pattern)

Účastníci• Component – definuje rozhranie pre dynamické

pridávanie správania/vlastností.• ConcreteComponent – definuje objekt, ktorému

možno dynamicky pridávať správanie/vlastnosti.

• Decorator – drží referenciu na Component objekt a zároveň implementuje rozhranie kompatibilné z Component.

• ConcreteDecorator – pridáva správanie/vlastnosti objektu typu Component.

Page 5: Decorator  (design pattern)

Príklad

Page 6: Decorator  (design pattern)

Využitie

• Dynamické a transparentné pridávanie a odoberanie správania/vlastností objektom

• Ako alternatíva k dedičnosti, v prípade ak tá nie je použiteľná alebo by spôsobila vznik množstva podtried

• Dekorovaný objekt nevie o tom že je dekorovaný.

Page 7: Decorator  (design pattern)

Výhody

• Flexibilnejšia ako dedičnosť:– Možnosť pridávať a odoberať správanie/vlastnosti

dynamicky za behu.– Nie je nutné vytvárať množstvo tried pre

zachytenie všetkých kombinácií.– Možnosť mixovať rôzne správanie dokopy a

viacnásobne.– Je možné sa vyhnúť tvorbe komplexných tried

mysliacich na budúcnosť, namiesto toho zložitosť narastá postupne podľa potreby.

Page 8: Decorator  (design pattern)

Nevýhody

• Flexibilnejšia ako dedičnosť:– Programátor sa nemusí obmedzovať a môže si

vytvárať množstvo malých objektov presne na mieru.

– Dekorovaný objekt nie je to isté ako reťazec jeho dekorátorov.

– Objekty sa nelíšia typom, ale dynamickým zostavením a štruktúrou (náročné na orientáciu).

– Pamäťový a rýchlostný overhead (v prípade dlhého zreťazenia alebo ťažkých dekorátorov/komponentu).

Page 9: Decorator  (design pattern)

Vzťahy k ďalším vzorom• Dekorátor– narozdiel od Adaptéru nemení rozhranie, len

správanie/vlastnosti.

– je možné vnímať ako Composite s jedným objektom. Dekorátor však rozširuje správanie a nie je určený na agregáciu.

– je alternatívou zmeny správania objektu k Strategy; v druhom prípade je možné vyňať časť správania do samostatného objektu, čo sa už ale nezaobíde bez spolupráce objektu, ktorého správanie chcem urobiť „generickejším“.

Page 10: Decorator  (design pattern)

Dekorátory a Java

Dekorátory a Java EE• Štandardná súčasť Java EE definovaná ako súčasť JSR-

299 CDI špecifikácie.

Page 11: Decorator  (design pattern)

Kontrakt objektu ktorý dekorujem

Dekorátor spĺňa kontrakt

Page 12: Decorator  (design pattern)

Dekorátor odkazuje na objekt

Page 13: Decorator  (design pattern)

Dekorátor mení správanie objektu

Page 14: Decorator  (design pattern)

Stačí registrácia v bean bundli (akékoľvek .war-ko alebo .ear-ko alebo .ejb-ko) ...

... o zvyšok sa postará kontajer.

Page 15: Decorator  (design pattern)

Ďakujem za pozornosť!