gpt4 book ai didi

c# - switch 语句是否适用于工厂方法? C#

转载 作者:可可西里 更新时间:2023-11-01 08:02:50 25 4
gpt4 key购买 nike

我想返回一个接口(interface),在 switch 语句中我想设置它。这是一个糟糕的设计吗?

private IResultEntity GetEntity(char? someType)
{
IResultEntity entity = null;

switch (someType)
{
case 'L': //life
entity = new LifeEntity();
break;
case 'P': //property
entity = new PropertyEntity();
break;
case 'D': //disability
entity = new DisabilityEntity();
break;
case 'C': //credit card
entity = new CreditCardEntity();
break;
}

return entity;
}

最佳答案

我通常不介意工厂中的 switch 语句,前提是我可以分组并控制我希望我的工厂提前创建的所有派生类。

有时,用户创建的插件可能想要将它自己的类添加到该开关列表,然后 swich 语句是不够的。

我发现这个很好 source for some more info关于创建一些更强大/通用的工厂类

我通常采用的一个很好的折衷方法是为每个工厂类保留一个静态 Dictionary

人们可以使用某种方式“注册”他们自己的实现

Factories.TypeRegistration.StaticDictionary.Add("somekey",typeof(MyDerivedClass))

(或者更好的是,使用注册方法并隐藏 StaticDictionary)

然后工厂有一个简单的任务,即通过在表中执行查找来创建实例:

Activator.CreateInstance(Factories.TypeRegistration.StaticDictionary["somekey"]);

关于c# - switch 语句是否适用于工厂方法? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com