gpt4 book ai didi

c# - Strategy设计模式是否适合基于字符串比较的逻辑?

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:30 25 4
gpt4 key购买 nike

到目前为止,我的代码有多个 if else 语句分支,具体取决于字符串的值。即

if(input == "condition1")
{
// Some logic
}
else if(input =="condition1")
{
// Some other logic
}

我打算使用策略模式。这是正确的方法吗?如果是,我如何根据条件创建正确的具体策略对象?

谢谢

最佳答案

在您提供的代码示例中,Strategy 不会让您摆脱已有的 if 条件。您最终需要一个工厂来创建您的策略对象,如下所示:

static class StrategyFactory
{
static IStrategy CreateStrategy(string input)
{
if (input == "condition1")
{
return new StrategyForCondition1();
}
else if (input == "condition2")
{
return new StrategyForCondition2();
}
}
}

这就是为什么我不建议您使用 Strategy 的原因。

一个非常优雅的替代解决方案是使用字典,其中键是输入字符串值,操作是 if 语句的内容:

var actions = new Dictionary<string, Action>
{
{"condition1", () => Console.WriteLine("condition1")},
{"condition2", NameOfMethodThatHandlesCondition2}
};

现在,这个解决方案的美妙之处在于您只需一行代码即可使用它:

actions[input];

请在此处查看示例:http://elegantcode.com/2009/01/10/refactoring-a-switch-statement/

您的代码示例中的一个问题是您正在与一个字符串进行比较...它可以是任何可能的值。如果可能,请创建一个代表所有可能条件的枚举。这将防止出现您未预料到的字符串值。

关于c# - Strategy设计模式是否适合基于字符串比较的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008533/

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