I don't have the gang of four here at my cubicle, but I do develop code which uses decorators.
Decorator B should not "inherit" anything from A; they are more of a 'friend' relationship. In Perl, you would probably end up munging the symbol table to accomplish it. Decorators are added after-the-fact, per-instance, upon demand. So SOME instances of A also have B-like qualities, and SOME instances of A do not.
Another way of saying it: You don't really say "make a new instance of a B," but instead, "make a new instance of an A, and then attach some B-ness to it."
my $a = new A(); $a->bee(); # A::bee() does not exist or has no effect $a->attach('B'); # make A load B and attach B methods $a->bee(); # A::bee() now exists thanks to B::bee
This approach would still hold true, even if you make another Decorator like C. Some A instances may have B, some have C, some have both B and C, and some have neither.
Update: You can then make a D class which inherits from A, but always attaches B-ness and C-ness.
--
[ e d @ h a l l e y . c c ]
In reply to Re: Decorator(?) classes and inheritance
by halley
in thread Decorator(?) classes and inheritance
by dragonchild
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |