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