工厂而不是开关

本文关键字:开关 工厂 | 更新日期: 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