150 likes | 314 Views
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.
E N D
Decorator (design pattern) Bc. Martin Petruňa 16.10.2012 SAI
Zaradenie • Prototype patrí medzi štrukturálnenávrhové vzory • Schéma:
Zaradenie • Prototype patrí medzi štrukturálnená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.
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
Stačí registrácia v beanbundli (akékoľvek .war-ko alebo .ear-ko alebo .ejb-ko) ... ... o zvyšok sa postará kontajer.