我有这个代码可以工作,但想要改进它:
public class VisibleComponent extends Component
{
static private var itz:Initializer = new Initializer(VisibleComponent);
// ... omitted
}
public class Initializer
{
public function Initializer(type:Class)
{
Component.registerType(type);
}
}
我想知道的是:
我可以自动获取VisibleComponent
的类对象(定义)吗?
(而不是手动复制粘贴VisibleComponent
)?
例如:
public class VisibleComponent extends Component
{
// not working because `static` member dont have `this`
static private var itz:Initializer = new Initializer(this.constructor as Class);
}
或
public class VisibleComponent extends Component
{
// how to do?
static private var itz:Initializer = new Initializer(getMyDefinition());
}
我要做的是在程序执行开始时建立一个Dictionary
string
到Class
,一个条目反映一个派生类扩展Compoenent
}。
因此,对于static
成员变量,此初始化将在一开始就发生,并且对于每个扩展Component
的类只会发生一次。
谢谢!
答案 0 :(得分:0)
使Initializer
成为工厂并在那里注册组件。
package {
public class ComponentFactory {
private static var _pool:Object = {}; // or make it a final const
public function create(className:String):Component {
var clazz:Class = getDefinitionByName(className) as Class;
if (!clazz) {
throw new Error("Class not found.");
}
return register(Component(new class())); // fail fast
}
protected function register(c:Component):Component {
// register the component
// add dependencies
// log what you need to log
return c;
}
protected function unregister(c:Component):Component {
// unregister the component
// removed dependencies properly
// log what you need to log
return c;
}
}
}
更容易实现,理解并提供适当的子类化......并且您的组件不需要知道任何有关方式的信息,需要创建它们。对此,这是更重要的方面。