Introduction

Flash is a lightweight cross-platform runtime for rich media, enterprise applications and mobile applications, as well as an integrated development environment. Flash can be programmed in ActionScript 1/2/3.

Sunday, September 21st, 2003 at 4:39 pm

Composite

Basic implementation:

// :: Component :: //
interface Component{
        public function operation():Void;
}

// :: Leaf :: //
class Leaf implements Component{
        private var number:Number;

        public function Leaf(aNumber:Number){
                number = aNumber;
        }
        public function operation():Void{
                trace(”Leaf ” + number + “: operation“);
        }
}

// :: Composite :: //
class Composite implements Component{
        private var children:Array;

        public function Composite(){
                children = new Array();
        }
        public function operation():Void{
                for(var i:Number=0; i < children.length; i++){
                        children[i].operation();
                }
        }
        public function addComponent(aComponent:Component):Number{
                return children.push(aComponent)-1;
        }
        public function removeComponent(aNumber:Number):Void{
                children.splice(aNumber, 1);
        }
        public function getChild(aNumber:Number):Component{
                return children[aNumber];
        }
}

// usage
var aComponent:Composite = new Composite();
aComponent.addComponent(new Leaf(0));

var aComposite:Composite = new Composite();
aComposite.addComponent(aComponent);
aComposite.addComponent(new Leaf(1));
var leaf2 = aComposite.addComponent(new Leaf(2));
aComposite.addComponent(new Leaf(3));

aComposite.operation();

trace(”——————————–“);

aComposite.getChild(leaf2).operation();

trace(”——————————–“);

aComposite.removeComponent(leaf2);
aComposite.operation();

/* Output:
Leaf 0: operation
Leaf 1: operation
Leaf 2: operation
Leaf 3: operation
——————————–
Leaf 2: operation
——————————–
Leaf 0: operation
Leaf 1: operation
Leaf 3: operation
*/