工厂而不是开关
本文关键字:开关 工厂 | 更新日期: 2023-09-27 17:50:16
我有以下方法:
Label LabelFactory(string template, object id) {
Label label = GetLabelTemplate(template);
if (label == null) throw new Exception("Unknown Label type or Label cannot be loaded.");
switch (template) {
case "BTAC":
label.Data = GetDataForLabel<BTAC>(id); break;
case "KTAC":
label.Data = GetDataForLabel<KTAC>(id); break;
...
}
return label;
}
调用站点不知道类型(BTAC、KTAC等),所以我必须使用这个模板参数。然而,我不喜欢这个开关。有什么优雅的替代方法吗?
优雅在旁观者的眼中;也就是在你之后阅读代码的人。
也就是说;没有优雅的方式,没有。
你必须回到反射,找出哪个类对应于发送进来的字符串变量模板。
也许MEF或Prism有帮助。
HTH