Funny Parameterized Factory

package{

	import flash.utils.getDefinitionByName;
	
	public class Creator{
		
		public function Creator():void{
			// classes we can create
			 ClassA;
			 ClassB;
		}

		public function create(type:String):ISomeInterface{
			 var ClassRef:Class = getDefinitionByName(type) as Class;
			 return ISomeInterface(new ClassRef());
		}
	}
}
package{
	public interface ISomeInterface{
		function sayHi():void;
	}
}
 package{
	
	public class ClassA implements ISomeInterface{
		
		public function ClassA(){
			trace("new ClassA()");
		}
		
		public function sayHi():void{
			trace("hello I am a ClassA instance");
		}
	}
	 
}
 package{
	
	public class ClassB implements ISomeInterface{
		
		public function ClassB(){
			trace("new ClassB()");
		}
		
		public function sayHi():void{
			trace("hello I am a ClassB instance");
		}
	}
	 
}

… and lastly on the timeline:

var creator:Creator = new Creator();

var a:ISomeInterface = creator.create("ClassA");
a.sayHi();

var b:ISomeInterface = creator.create("ClassB");
b.sayHi();

/*outputs

new ClassA()
hello I am a ClassA instance
new ClassB()
hello I am a ClassB instance

*/

Unfortunately this has some downsides compared to a switch or if statement parameterized factory. Still fun though…