Design Patterns using Action Script 3: Creational Patterns (Factory & Singleton)
I´m reading the O´Reilly book “ActionScript 3.0 Design Patterns”. Following are examples related in this excellent book but modified by me. This is the first part, about creational patterns (Singleton and Factory).
Singleton
Class User.as, used to store user proprieties.
package classes
{
public const User:_Singleton = new _Singleton();
}
/**
* Class Singleton with proprieties to use in application
*/
internal class _Singleton
{
function _Singleton(){}
public var id:int;
public var name:String;
public var description:String;
public var username:String;
public var password:String;
}Factory
Example related in book, that shows creation of products.
File Creator.as:
package example {
import flash.errors.IllegalOperationError;
// ABSTRACT Class (should be subclassed and not instantiated)
public class Creator {
public function doStuff():void {
var product:IProduct = this.factoryMethod();
product.manipulate();
}
// ABSTRACT Method (must be overridden in a subclass)
protected function factoryMethod():IProduct {
throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
return null;
}
}
}File CreatorA.as:
package example {
// Concrete creator A (subclass of Creator)
public class CreatorA extends Creator {
override protected function factoryMethod():IProduct {
trace("Creating product 1");
return new Product1(); // returns concrete product
}
}
}File CreatorB.as:
package example {
// Concrete creator B (subclass of Creator)
public class CreatorB extends Creator {
override protected function factoryMethod():IProduct {
trace("Creating product 2");
return new Product2(); // returns concrete product
}
}
}File IProduct.as:
package example {
public interface IProduct {
function manipulate():void;
}
}File Product1.as:
package example {
internal class Product1 implements IProduct {
public function manipulate():void {
trace("Doing stuff with Product1");
}
}
}File Product2.as:
package example {
internal class Product2 implements IProduct {
public function manipulate():void {
trace("Doing stuff with Product2");
}
}
}package classes
{
public const User:_Singleton = new _Singleton();
}
{
public const User:_Singleton = new _Singleton();
}
/**
* Class Singleton that represents proprieties used to change language
*/
internal class _Singleton
{
function _Singleton(){}
public var id:int;
public var name:String;
public var description:String;
public var username:String;
public var password:String;
}


