Decorator

Návrhové vzory

SSŠVT


Decorator

Obecný koncept

Návrhový vzor Decorator umožňuje rozšířit schopnosti objektu, přičemž ovšem zachová jeho API (veřejné rozhraní). Tento koncept ale zároveň nevyžaduje, abychom kvůli tomuto rozšíření vytvořili odvozenou třídu.

Místo odvozené třídy (podtřídy původní třídy s požadovaným API) vytvoříme jinou (nezávislou) třídu, která ovšem bude rovněž poskytovat toto původní API (bude mít stejné metody).

Příkladem může být např. okno nebo ovládací prvek na formuláři. To jsou příklady výchozího objektu. Pokud chceme, aby formulář, případně např. nějaký listbox na formuláři byly scrollovatelné, přidáme do soustavy tříd novou třídu (dekorátor), která bude mít stejné rozhraní jako formulář nebo listbox, ale zobrazí na nich scrollbar. Objekt, který dekoruje, má dekorátor zapouzdřený v sobě a požadavky směrované na svoje API "přeposílá" na API tohoto zapouzdřeného objektu.


        
        

Příklad v .NETu

Mějme takovouto objektovou hierarchii:

Book and all its parts