想象一下,我有一个文件(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; ... } } }