Basic implementation:
// :: Builder :: //
class Builder{
private var result:String;
private function Builder(){
result = new String();
}
public function buildPartA(aString:String):Void{
result += “ :: ” + aString + “ :: “;
}
public function buildPartB(aNumber:Number):Void{
result += “ :: ” + aNumber.toString() + “ :: “;
}
public function buildPartC(aBoolean:Boolean):Void{
result += “ :: ” + aBoolean.toString() + “ :: “;
}
}
// :: ConcreteBuilder :: //
class ConcreteBuilder extends Builder{
public function buildPartB(aNumber:Number):Void{
switch(aNumber){
case 1:
result += “ :: one :: “;
break;
case 2:
result += “ :: two :: “;
break;
case 3:
result += “ :: three :: “;
break;
default:
result += “ :: ” + aNumber.toString() + “ :: “;
}
}
public function getResult():String{
return result;
}
}
// :: Director :: //
class Director{
private var builder;
public function Director(aConcreteBuilder:Builder){
builder = aConcreteBuilder;
}
public function construct(anArray:Array):Void{
for(var i=0; i< anArray.length; i++){
switch(typeof(anArray[i])){
case “string“:
builder.buildPartA(anArray[i]);
break;
case “number“:
builder.buildPartB(anArray[i]);
break;
case “boolean“:
builder.buildPartC(anArray[i]);
break;
}
}
}
}
// usage
var aBuilder:ConcreteBuilder = new ConcreteBuilder();
var aDirector:Director = new Director(aBuilder);
aDirector.construct([”name“, “age“, 2, true]);
trace(aBuilder.getResult());
// Output:
// :: name :: :: age :: :: two :: :: true ::
