Yep, makes sense now. Thank you Michael. I appreciate your effort.

Claudia

On 9/13/07, Michael Schmalle <[EMAIL PROTECTED]> wrote:
>
>   Hi,
>
> > 1. Why does the Decorator become limited because the UIComponent needs
> to be added to the display list?
>
> This goes back to what I said about what decoration is.
>
> True decoration means,
>
> var juiceMaker:JuiceMaker = new JuiceMaker(); // Button
> juiceMaker = new JuiceMaster(juiceMaker); // implements IJuiceMaker
>
> juiceMaker.makeJuice("apple");
>
> - which then calls JuiceMaster's makeJuice, which then would call
> JuicMaker's makeJuice().
>
> I think you were mixing apples and oranges(no pun intended) when you first
> thought about this.
>
> As you can see after you decorate the Button with JuiceMaster, even
> thought it would implement the same type,
> juiceMaker is no longer a DisplayObject and thus, you cannot do this;
>
> myBox.addChild(juiceMaker);
>
> Does that make sense?
>
> Peace, Mike
>
>
>
> On 9/13/07, Claudia Barnal <[EMAIL PROTECTED]> wrote:
> >
> >   Thanks a lot Michael! One never stops learning.
> >
> > I'll be using this stuff from now on, but I still have one question
> > about all this (sorry to take your time).
> >
> > In your first post, you wrote this:
> > "You can't decorate a UIComponent since it is a DisplayObject and needs
> > to be added to the display list."
> >
> > 1. Why does the Decorator become limited because the UIComponent needs
> > to be added to the display list?
> >
> > Thanks!
> >
> >
> >
> >
> > On 9/12/07, Michael Schmalle <[EMAIL PROTECTED]> wrote:
> > >
> > >   arrg, I'm doing to many things today..
> > >
> > > in the construct that would be
> > >
> > > makerImpl = new JuiceMaster();
> > >
> > > instead of;
> > >
> > > makerImpl = new JuiceMaker();
> > >
> > > I'm sure you knew that but,  I'm just a perfectionist even with
> > > irrelevant emails. :)
> > >
> > > Mike
> > >
> > >
> > > On 9/12/07, Michael Schmalle < [EMAIL PROTECTED]> wrote:
> > > >
> > > > Hi,
> > > >
> > > > below is the 'concrete' version;
> > > >
> > > >
> > > > class JuiceMaster
> > > > {
> > > >    public function makeJuice(type:String):void
> > > >    {
> > > >       trace("Happily making", type, "juice!", "Tralalala!");
> > > >    }
> > > > }
> > > >
> > > > public class JuiceMaker
> > > >           extends Button
> > > > {
> > > >
> > > >    private var _makerClass:Class;
> > > >    private var makerImpl:JuiceMaster;
> > > >
> > > >    public function set makerClass(value:Class):void
> > > >    {
> > > >        _makerClass = value;
> > > >        makerImpl = new _makerClass();
> > > >    }
> > > >
> > > >    public function set makerClass():Class
> > > >    {
> > > >        return makerImpl;
> > > >    }
> > > >
> > > >    public function JuiceMaker()
> > > >    {
> > > >       super();
> > > >
> > > >       // you could just make the default implementation here
> > > >       // thats about as concrete as it gets
> > > >       makerImpl = new JuiceMaker();
> > > >    }
> > > >
> > > >    public function makeJuice(type:String):void
> > > >    {
> > > >       if (makerImpl is JuiceMaster)
> > > >          makerImpl.makeJuice(type);
> > > >    }
> > > > }
> > > >
> > > >
> > > > Notice the types are concrete meaning you are programming to an
> > > > implemented class, no polymorphism here.
> > > >
> > > > And note this is not 'real' decoration either.
> > > >
> > > > Real decoration means you pass a reference to an instance of the
> > > > decorator and actually call the decorators methods.
> > > >
> > > > This is like Composition Decorating, and maybe there is some other
> > > > OO word for it. I don't care about the technical of it just that it IS a
> > > > pattern good for DisplayObjects.
> > > >
> > > > Peace, Mike
> > > >
> > > > On 9/12/07, Claudia Barnal < [EMAIL PROTECTED]> wrote:
> > > > >
> > > > >   Yeah, I had thought about something using composition. But
> > > > > somewhere I had read that the Decorator was what I needed :(
> > > > >
> > > > > I'll do it as you mentioned, but I would still love to hear about
> > > > > the Concrete class that you mention :)
> > > > >
> > > > > Thanks Michael!
> > > > >
> > > > > On 9/12/07, Michael Schmalle < [EMAIL PROTECTED]> wrote:
> > > > >
> > > > > >   Oh yeah
> > > > > >
> > > > > > <JuiceMaker id="myJuiceMaker" decorator="{JuiceMaster}" click="
> > > > > > myJuiceMaker.makeJuice('orange')" />
> > > > > >
> > > > > > is supposed to be;
> > > > > >
> > > > > > <JuiceMaker id="myJuiceMaker" makerClass="{JuiceMaster}" click="
> > > > > > myJuiceMaker.makeJuice('orange')" />
> > > > > >
> > > > > >
> > > > > >  On 9/12/07, Michael Schmalle <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > >  Hi,
> > > > > > >
> > > > > > > You can't decorate a UIComponent since it is a DisplayObject
> > > > > > > and needs to be added to the display list.
> > > > > > >
> > > > > > > You have to either us composition or subclass Button and use
> > > > > > > an interface and pass the class to decorate the Button with.
> > > > > > >
> > > > > > > <JuiceMaker id="myJuiceMaker" decorator="{JuiceMaster}"
> > > > > > > click="myJuiceMaker.makeJuice('orange')" />
> > > > > > >
> > > > > > >
> > > > > > > class JuiceMaster
> > > > > > >          implemented IJuiceMaker
> > > > > > > {
> > > > > > >    public function makeJuice(type:String):void
> > > > > > >    {
> > > > > > >       trace("Happily making", type, "juice!", "Tralalala!");
> > > > > > >    }
> > > > > > > }
> > > > > > >
> > > > > > > public class JuiceMaker
> > > > > > >           extends Button
> > > > > > >           implemented IJuiceMaker
> > > > > > > {
> > > > > > >
> > > > > > >    private var _makerClass:Class;
> > > > > > >    private var makerImpl:IJuiceMaster;
> > > > > > >
> > > > > > >    public function set makerClass(value:Class):void
> > > > > > >    {
> > > > > > >        _makerClass = value;
> > > > > > >        makerImpl = new _makerClass();
> > > > > > >    }
> > > > > > >
> > > > > > >    public function set makerClass():Class
> > > > > > >    {
> > > > > > >        return makerImpl;
> > > > > > >    }
> > > > > > >
> > > > > > >    public function JuiceMaker()
> > > > > > >    {
> > > > > > >       super();
> > > > > > >    }
> > > > > > >
> > > > > > >    public function makeJuice(type:String):void
> > > > > > >    {
> > > > > > >       if (makerImpl is IJuiceMaker)
> > > > > > >          makerImpl.makeJuice(type);
> > > > > > >    }
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > public interface IJuiceMaker
> > > > > > > {
> > > > > > >     function makeJuice(type:String):void;
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > The above is something that would help what you are trying to
> > > > > > > achieve with display object.
> > > > > > >
> > > > > > > You could also drop the interfaces and use concrete types but
> > > > > > > hey, if your asking about decorators, your asking about design 
> > > > > > > patterns. ;-)
> > > > > > >
> > > > > > >
> > > > > > > Peace, Mike
> > > > > > >
> > > > > > > On 9/12/07, Claudia Barnal < [EMAIL PROTECTED]> wrote:
> > > > > > > >
> > > > > > > >   I believe I might be missing something with the Decorator
> > > > > > > > Pattern.
> > > > > > > > I've tried to get a simple example to work, but I get too
> > > > > > > > mixed up
> > > > > > > > with all the abstracts and what not.
> > > > > > > >
> > > > > > > > Here's what I'm trying to do:
> > > > > > > >
> > > > > > > > Extend a Button and add some functionality to it gotten from
> > > > > > > > another
> > > > > > > > class (non visual). From what I can understand, this is what
> > > > > > > > the
> > > > > > > > Decorator Pattern is for.
> > > > > > > >
> > > > > > > > In pseudo code this is the basic functionality I want:
> > > > > > > >
> > > > > > > > class JuiceMaster
> > > > > > > > {
> > > > > > > > public function makeJuice(type:String):void
> > > > > > > > {
> > > > > > > > trace("Happily making", type, "juice!", "Tralalala!");
> > > > > > > > }
> > > > > > > > }
> > > > > > > >
> > > > > > > > class JuiceMaker extends Button
> > > > > > > > {
> > > > > > > > public function JuiceMaker()
> > > > > > > > {
> > > > > > > > Super();
> > > > > > > > makeJuice("apple");
> > > > > > > > }
> > > > > > > > }
> > > > > > > >
> > > > > > > > And in MXML, I should be able to do something like this:
> > > > > > > >
> > > > > > > > <JuiceMaker id="myJuiceMaker" 
> > > > > > > > click="myJuiceMaker.makeJuice('orange')"
> > > > > > > > />
> > > > > > > >
> > > > > > > > Of course this example isn't going into any detail, and
> > > > > > > > doesn't make
> > > > > > > > much sense, but this is somewhat my need.
> > > > > > > >
> > > > > > > > Any explicit explanation on how to get something like this
> > > > > > > > to work
> > > > > > > > with the Decorator Pattern is greatly appreciated.
> > > > > > > >
> > > > > > > > Thanks!
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Teoti Graphix
> > > > > > > http://www.teotigraphix.com
> > > > > > >
> > > > > > > Blog - Flex2Components
> > > > > > > http://www.flex2components.com
> > > > > > >
> > > > > > > You can find more by solving the problem then by 'asking the
> > > > > > > question'.
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Teoti Graphix
> > > > > > http://www.teotigraphix.com
> > > > > >
> > > > > > Blog - Flex2Components
> > > > > > http://www.flex2components.com
> > > > > >
> > > > > > You can find more by solving the problem then by 'asking the
> > > > > > question'.
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Teoti Graphix
> > > > http://www.teotigraphix.com
> > > >
> > > > Blog - Flex2Components
> > > > http://www.flex2components.com
> > > >
> > > > You can find more by solving the problem then by 'asking the
> > > > question'.
> > > >
> > >
> > >
> > >
> > > --
> > > Teoti Graphix
> > > http://www.teotigraphix.com
> > >
> > > Blog - Flex2Components
> > > http://www.flex2components.com
> > >
> > > You can find more by solving the problem then by 'asking the
> > > question'.
> > >
> > >
> >
>
>
> --
> Teoti Graphix
> http://www.teotigraphix.com
>
> Blog - Flex2Components
> http://www.flex2components.com
>
> You can find more by solving the problem then by 'asking the question'.
>
>  
>

Reply via email to