decorator (design pattern)
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 PresentationTRANSCRIPT
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ť!