Decorator (design pattern)

Preview:

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

Decorator (design pattern)

Bc. Martin Petruňa16.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• 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.

Príklad

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ý.

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.

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).

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“.

Dekorátory a Java

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

299 CDI špecifikácie.

Kontrakt objektu ktorý dekorujem

Dekorátor spĺňa kontrakt

Dekorátor odkazuje na objekt

Dekorátor mení správanie objektu

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

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

Ďakujem za pozornosť!

Recommended