The Decorator Pattern in Action - Concrete decorator classes
(Page 3 of 4 )
Moving from the minimalist example previously shown in this chapter, it’s a little easier to see how the Decorator pattern works by actually seeing something happening in a graphic display. When the initial instance of the concrete component is created, all references in the concrete decorator class are to that instance. (See example 4-16, where the concrete component is wrapped in the decorators.) In all the concrete decorator classes, the reference to the model variable is a reference to the concrete component object. In this case, that’s the instance of the Sue() class, but it can be any instance of any concrete component. That’s why, if you wish to expand the application to include more concrete components (paper dolls to dress), you don’t have to make any fundamental changes. Just add another concrete component class. In Examples 4-10 to 4-15, the captions are the filenames.
Example 4-10. OrangeDress.as
package
{
public class OrangeDress extends Dresser
{
private var model:Model;
public function OrangeDress(model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~orangedress";
}
}
}
Example 4-11. BlueDress.as
package
{
public class BlueDress extends Dresser
{
private var model:Model;
public function BlueDress(model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~bluedress";
}
}
}
Example 4-12. Bow.as
package
{
public class Bow extends Dresser
{
private var model:Model;
public function Bow(model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~bow";
}
}
}
Example 4-13. Umbrella.as
package
{
public class Umbrella extends Dresser
{
private var model:Model;
public function Umbrella (model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~ umbrella ";
}
}
}
Example 4-14. Hat.as
package
{
public class Hat extends Dresser
{
private var model:Model;
public function Hat(model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~hat";
}
}
}
Example 4-15. Muff.as
package
{
public class Muff extends Dresser
{
private var model:Model;
public function Muff(model:Model)
{
this.model=model;
}
override public function getDressed():String
{
return model.getDressed() + "~muff";
}
}
}
All six decorations can be used in any combination you want with the instance of theModelclass. This next section shows how to implement the Decorator pattern using the different decorators.
Next: Implementing the Paper Doll Decorator >>
More Flash Articles
More By O'Reilly Media
|
This article is excerpted from chapter four of ActionScript 3.0 Design Patterns Object Oriented Programming Techniques, written by William B. Sanders and Chandima Cumaranatunge (O'Reilly, 2007 ISBN: 0596528469). Check it out today at your favorite bookstore. Buy this book now.
|
|