gpt4 book ai didi

c# - 工厂模式,避免不同接口(interface)使用相同的switch case

转载 作者:行者123 更新时间:2023-11-30 20:25:46 24 4
gpt4 key购买 nike

我有一个实现了 3 个不同接口(interface)的模型

public class CustomerRateSettingModel :  IBaseFactory, IHandleSearch, IHandleSearchAggregate

我对实现设计模式和尝试实现工厂模式来创建实例非常陌生。但是我无法找到一种正确的方法来避免在编写 Factory 时使用相同的 Switch 语句

  public static IHandleSearch GetClassInstanceForSearch(string className)
{
switch (className.ToLower())
{
case "customerratesettingmodel":
return new CustomerRateSettingModel();

default: return null;
}
}

private static IBaseFactory ManufactureModel(string className)
{
switch (className.ToLower())
{
case "customerratesettingmodel":
return new CustomerRateSettingModel();

default: return null;
}
}

有什么正确的方法来处理这样的场景吗?

供引用:调用工厂的代码

  IHandleSearch instance = ModelFactory.GetClassInstanceForSearch(modelName);


var modelResult = instance.GetSearch(indexName, searchHistory.SearchParameters);

最佳答案

制作 Dictionary<string,Func<object>>将名称映射到对象制造商。使用 as运算符(operator)测试object为了符合所需的接口(interface):

static readonly IDictionary<string,Func<object>> Makers = new Dictionary<string,Func<object>> {
["customerratesettingmodel"] = () => new CustomerRateSettingModel()
};
public static IHandleSearch GetClassInstanceForSearch(string className) {
return Construct<IHandleSearch>(className);
}
public static IBaseFactory GetClassInstanceForSearch(string className) {
return Construct<IBaseFactory>(className);
}
private static T Construct<T>(string className) where T : class {
if (!Makers.TryGetValue(className.ToLower(), out var makeObject) {
return null;
}
return makeObject() as T;
}

关于c# - 工厂模式,避免不同接口(interface)使用相同的switch case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927069/

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