Lua中通过Map存储构造函数实现多类型对象创建的问询
存储构造函数到映射表实现动态对象创建
这个思路太实用了!把构造函数关联到字符串键并存在映射表里,刚好是处理遍历、配置驱动实例化这类场景的绝佳方案——你完全找对方向了。
核心逻辑
本质上就是利用构造函数本身是可被引用的对象这一特性,把它们作为值存在Map(字典)里,之后通过键名快速检索,直接调用构造函数就能生成对应类型的实例。
完整示例代码
假设我们已经定义好了IntegerObj和FloatObj这两个类,下面是具体的实现(以Python为例,这个模式在绝大多数支持第一类函数的语言里都能复用):
# 先定义两个示例类 class IntegerObj: def __init__(self, arg1, arg2, arg3): self.total = arg1 + arg2 + arg3 # 这里可以加其他初始化逻辑 class FloatObj: def __init__(self, arg1, arg2, arg3): self.total = (arg1 + arg2 + arg3) * 1.0 # 这里可以加其他初始化逻辑 # 构建构造函数映射表 ObjByType = { "integer": IntegerObj, "float": FloatObj } # 动态创建实例——和你预想的写法完全一致! x = ObjByType["integer"](1, 2, 3) print(x.total) # 输出 6 y = ObjByType["float"](1, 2, 3) print(y.total) # 输出 6.0
几个实用的小提醒
- 尽量保证所有映射的构造函数参数签名一致,不然调用时很容易因为参数不匹配报错。如果需要处理不同参数的情况,可以在映射表里存包装函数,先统一参数入口再调用对应构造函数。
- 如果是强类型语言(比如Java),可以让所有目标类实现同一个接口,把Map的类型声明为
Map<String, Supplier<YourInterface>>,这样能保证类型安全,避免类型转换问题。 - 要是需要更复杂的对象创建逻辑(比如依赖注入、初始化前校验),可以把映射表里的值换成工厂方法,而不是直接存构造函数,灵活性会更高。
内容的提问来源于stack exchange,提问作者Mahashi
相关产品推荐
相关产品推荐

