music,code,dialog,rest
分类: 架构设计与优化
2016-07-31 11:58:37
print ([cls.__name__ for cls in globals()[baseclassname].__subclasses__()])
['b1', 'b2']
baseclassname='b1'
print ([cls.__name__ for cls in globals()[baseclassname].__subclasses__()])['b3']
使用这个方法,识别可用的插件类,并加载每个plugin的注册对象到Plugins全局插件对象注册字典中。
该字典中,一个记录有一个键值对,就是对象的名称和插件注册对象的实例引用。
通过插件父类的信息检索,可以动态获得当前加载的插件的名称和数量,并更新全局插件字典。
每个plugin的注册对象,包含有对该plugin的适用条件和规则,和相应的动态生成plugins功能对象的方法。
然后再通过静态工厂方法,根据注册对象的条件,生成对应的插件功能对象实例。
主模块,实现胶水的功能,完成上层应用,根据不同条件返回下层具体功能实例,让上层调用者使用通用的接口完成对应的功能。
zenith
2016/07/31