gpt4 book ai didi

design-patterns - 写一个基于枚举值的方法而不陷入代码异味

转载 作者:行者123 更新时间:2023-12-01 07:23:05 25 4
gpt4 key购买 nike

假设我有一个文档(word 文档)。

我有一个枚举,它将指示如何从文档中提取数据。因此,如果我只想要文本、图像或两者(枚举的 3 个成员)。

我有一个基于此枚举的 case 语句,但又不会陷入代码异味,我该如何编写不太重复的代码?对于 switch 中的每个条件,我应该有一个单独的方法(最简单的方法),还是一个接受参数的方法(比如枚举的值),然后使用 if 语句说 if(xyz) do abc,等等在。

或者有没有更快、更有效的方法?

最佳答案

我将使用策略模式与工厂结合来根据枚举的值创建适当的策略。 编辑 正如其他人所指出的,您也可以通过 map 确定正确的策略。 Factory是我的选择,因为它只封装了逻辑,不需要任何数据存储。

public interface IExtractionStrategy
{
object Extract( Document doc ); // or what ever result is best
}

public class TextExtractionStrategy : IExtractionStrategy
{
public object Extract( Document doc )
{
.... algorithm for extracting text...
}
}

public class ImageExtractionStrategy : IExtractionStrategy
{
public object Extract( Document doc )
{
.... algorithm for extracting images...
}
}


public static class StrategyFactory
{
IExtractionStrategy GetStrategy( ExtractionEnum strategyType )
{
switch (strategyType)
{
case ExtractionEnum.Text:
return new TextExtractionStrategy();
break;
case ExtractionEnum.Image:
return new ImageExtractionStrategy();
break;

...
}
}
}

关于design-patterns - 写一个基于枚举值的方法而不陷入代码异味,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326128/

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