Following are 14 concrete decorator classes. They’re all the same except for the names and values assigned to the numeric properties. It’s a lot easier just to do one, and then paste it into a new ActionScript file and edit in changes rather than doing them all from scratch. Once you’ve completed all 14, go ahead and add two more—good and evil concrete decorators of your own making. In Examples 4-22 through 4-35, the filename is in the caption.
Heavenly virtues
Example 4-22. Integrity.as
package { public class Integrity extends Decorator { private var components:Component; public function Integrity(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Integrity"; } override public function good():Number { return 14 + components.good(); } override public function evil():Number { return -6 + components.evil(); } } }
Example 4-23. Hope.as
package { public class Hope extends Decorator { private var components:Component; public function Hope(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Hope"; } override public function good():Number { return 5 + components.good(); } override public function evil():Number { return -10 + components.evil(); } } }
Example 4-24. Courage.as
package { public class Courage extends Decorator { private var components:Component; public function Courage(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Courage"; } override public function good():Number { return 10 + components.good(); } override public function evil():Number { return -8 + components.evil(); } } }
Example 4-25. Compassion.as
package { public class Compassion extends Decorator { private var components:Component; public function Compassion(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Compassion"; } override public function good():Number { return 7 + components.good(); } override public function evil():Number { return -15 + components.evil(); } } }
Example 4-26. Openness.as
package { public class Openness extends Decorator { private var components:Component; public function Openness(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Openness"; } override public function good():Number { return 12 + components.good(); } override public function evil():Number { return -15 + components.evil(); } } }
Example 4-27. Diligence.as
package { public class Diligence extends Decorator { private var components:Component; public function Diligence(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Diligence"; } override public function good():Number { return 10 + components.good(); } override public function evil():Number { return -5 + components.evil(); } } }
Example 4-28. Justice.as
package { public class Justice extends Decorator { private var components:Component; public function Justice(components:Component) { this.components=components; } override public function getSoul():String { return components.getSoul() + "|Justice"; } override public function good():Number { return 9 + components.good(); } override public function evil():Number { return -9 + components.evil(); } } }