C# 工厂代替开关
我有以下方法:C# 工厂代替开关,c#,.net,C#,.net,我有以下方法: 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.D
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;
}
标签LabelFactory(字符串模板,对象id){
标签标签=GetLabelTemplate(模板);
if(label==null)抛出新异常(“未知标签类型或标签无法加载”);
开关(模板){
案例“BTAC”:
label.Data=GetDataForLabel(id);中断;
案例“KTAC”:
label.Data=GetDataForLabel(id);中断;
...
}
退货标签;
}
调用站点不知道类型(BTAC、KTAC等),所以我不得不使用这个模板参数。然而,我不喜欢这个开关。有什么优雅的方法可以替代它吗
欢迎任何想法。情人眼里出西施;恰好是在您之后阅读代码的任何人。也就是说;没有优雅的方式,没有 您必须返回并找出哪个类对应于发送的字符串变量模板。
也许有帮助
嗯你到底不喜欢它的什么地方?这里有各种选项,例如
字典
,但如果不知道要求是什么,就很难知道该推荐什么。您可能希望在codereview上交叉发布此内容。stackexchange.comswitch
只是实现factory的一种方法。如果您需要可扩展性,请尝试实现RegisterResolveRelease模式。F.e.您可以使用一个名为“注册/解析”的IOC管理器。