接口,反射,工厂

来源:互联网 发布:selina烧伤事件 知乎 编辑:程序博客网 时间:2024/06/13 22:14

package sign
{
 public interface IFactory
 {
  function exec():String;
 }
}

package sign
{
 public class Factory1 implements IFactory
 {
  public function Factory1()
  {
  }
  public function exec():String
  {
   return "factory1"
  }
 }
}

package sign
{
 public class Factory2 implements IFactory
 {
  public function Factory2()
  {
  }
  public function exec():String
  {
   return "factory2"
  }
 }
}

package sign
{
 import flash.net.getClassByAlias;
 import flash.utils.getDefinitionByName;
 import flash.utils.getQualifiedClassName;
 import flash.utils.getQualifiedSuperclassName;
 

 public class FactoryOperate
 {
  public function FactoryOperate()
  {
  }
  public static function getOperate(str:String):sign.IFactory
  {
   var c:Class= getDefinitionByName(str) as Class
      var d:IFactory=new c()
   return d;
  }
  public static function getOperateByClass(value:*):IFactory
  {
   var classPath:String=getQualifiedClassName(value)
   classPath=classPath.replace("::", ".");
   return getOperate(classPath);
  }
 }
}

调用

    private var f:Factory1=new Factory1
    var ft:sign.IFactory=FactoryOperate.getOperateByClass(f)

var fa:String="Factory2"
    //var ft:sign.IFactory=FactoryOperate.getOperate("sign."+fa)
    Alert.show(ft.exec())

原创粉丝点击