当前位置:  开发笔记 > 编程语言 > 正文

基于枚举值编写方法而不会陷入代码气味

如何解决《基于枚举值编写方法而不会陷入代码气味》经验,为你挑选了1个好方法。

想象一下,我有一个文件(word文档).

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

我有一个基于这个枚举的case语句,但没有陷入代码味道,我怎么能编写不太重复的代码?对于交换机中的每个条件,我应该有一个单独的方法(最简单的方法),还是一个接受一个paremeter的方法(比如枚举的值),然后用if语句说if(xyz)做abc,等等上.

还是有更快,更有效的方式?



1> tvanfosson..:

我会使用与工厂结合的策略模式,根据枚举值创建适当的策略. 编辑正如其他人指出的那样,你也可以通过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;

             ...
         }
     }
}

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有