想象一下,我有一个文件(word文档).
我有一个枚举,它将指示如何从文档中提取数据.因此,如果我只想要文本,图像,或两者(枚举的3个成员).
我有一个基于这个枚举的case语句,但没有陷入代码味道,我怎么能编写不太重复的代码?对于交换机中的每个条件,我应该有一个单独的方法(最简单的方法),还是一个接受一个paremeter的方法(比如枚举的值),然后用if语句说if(xyz)做abc,等等上.
还是有更快,更有效的方式?
我会使用与工厂结合的策略模式,根据枚举值创建适当的策略. 编辑正如其他人指出的那样,你也可以通过Map确定正确的策略.工厂是我的选择,因为它只封装了逻辑,不需要任何数据存储.
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;
...
}
}
}
Run Code Online (Sandbox Code Playgroud)