169it -->


 
当前位置:  编程语言>其它

flash AS3反射实现(describeType和getDefinitionByName)

 
分享到:
    发布时间:2014-1-13  


     为什么要用反射机制去生成对象?首先,其目的是为了解耦,解除代码间的耦合程度,降低维护成本。如果你用过工厂模式,或者对维护噩梦有所感悟就会知道为什么要解耦了。无论什么工厂模式,即使是抽象...

      为什么要用反射机制去生成对象?首先,其目的是为了解耦,解除代码间的耦合程度,降低维护成本。如果你用过工厂模式,或者对维护噩梦有所感悟就会知道为什么要解耦了。无论什么工厂模式,即使是抽象工厂模式也好,也不能根本性解除代码中生成对象的耦合问题,只能说能大大降低耦合程度,因为你生成对象必然要new此对象,而这意味着没可能在不修改代码的前提下扩展新的内容,例如你要增加一些新的子类,必然要在生成的地方new一个此类对象。恩,实质就是修改已有代码去扩展新功能,违反了开闭原则,即使影响很小很小,但确实是违反了。小程序,小项目确实没有体现什么弊端,而当你程序达到足够庞大的时候,你就会发现,修改代码是一件很痛苦的事。正是这个原因,反射机制出现了。反射机制的原理我的理解是,通过一个中间件去配置要生成的对象,一般是通过XML文件实现,把你新增加的类的名字记录在XML配置文件内,通过已有的程序代码反射这个从配置文件里读取出来的类名字,动态生成对应类的对象。

反射功能:

      根据类型名字,能够生成这个类型的对象;或者

      根据某个类型对象,生成新的对象,就是”原型(prototype)"的概念。

像C++这类静态语言,实现反射须要外部支持,因为他语言类型本身不支持完整的运行时类型信息。AS3语言支持这类功能。

AS3中通过,describeType(obj:Object) 和getDefinitionByName(name:String) 就可以实现反射。

1. 获取对象名字

   如果我们应用已经知道对象名字,这步就不用做了。

     var xml:XML = describeType(data);        objName = xml.@name;

2. 根据名字生成对象

     var ObjClass:Class = getDefinitionByName(objName) as Class;      var obj:Object = new ObjClass();

最多就上面两步,就能实现反射了。

本类别最新文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号


-->