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.

Monday, September 15th, 2003 at 3:34 pm

Abstract Factory

Basic implementation:

// :: AbstractFactory :: //
class AbstractFactory{
        private var productA:ProductA;
        private var productB:ProductB;

        private function AbstractFactory(){
        }
        private function createProductA():Void{
                productA = new ProductA();
        }
        private function createProductB():Void{
                productB = new ProductB();
        }
}

// :: ConcreteFactory1 :: //
class ConcreteFactory1 extends AbstractFactory{
        public function ConcreteFactory1(){
                trace(”:: ConcreteFactory1 :: created“);

                createProductA();
                createProductB();
        }
        private function createProductA():Void{
                super.createProductA();
                productA.setSpecificValue(”specificValue1“);
        }
        private function createProductB():Void{
                super.createProductB();
                productB.setSpecificValue(”specificValue1“);
        }
}

// :: ConcreteFactory2 :: //
class ConcreteFactory2 extends AbstractFactory{
        public function ConcreteFactory2(){
                trace(”:: ConcreteFactory2 :: created“);

                createProductA();
                createProductB();
        }
        private function createProductA():Void{
                super.createProductA();
                productA.setSpecificValue(”specificValue2“);
        }
        private function createProductB():Void{
                super.createProductB();
                productB.setSpecificValue(”specificValue2“);
        }
}

// :: ProductA :: //
class ProductA{
        private var specificValue:String;

        public function setSpecificValue(aSpecificValue:String):Void{
                trace(aSpecificValue);

                specificValue = aSpecificValue;
        }
        public function getSpecificValue():String{
                return specificValue;
        }
}

// :: ProductB :: //
class ProductB{
        private var specificValue:String;

        public function setSpecificValue(aSpecificValue:String):Void{
                trace(aSpecificValue);

                specificValue = aSpecificValue;
        }
        public function getSpecificValue():String{
                return specificValue;
        }
}

// usage
var factory1:ConcreteFactory1 = new ConcreteFactory1();

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

var factory2:ConcreteFactory2 = new ConcreteFactory2();

// Output:

// :: ConcreteFactory1 :: created
// specificValue1
// specificValue1
// ———————————–
// :: ConcreteFactory2 :: created
// specificValue2
// specificValue2