首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将许多'if else‘语句转换为更简洁的方法

将许多'if else‘语句转换为更简洁的方法
EN

Stack Overflow用户
提问于 2013-01-03 18:10:07
回答 5查看 40.6K关注 0票数 112

我这里的代码检测mimeType是否等于某个MIME类型,如果是,它将执行特定的转换

代码语言:javascript
复制
public void convertToMp3(File src, File target,String mimeType){
    if(mimeType.equals("audio/mpeg")){
        ...
    }else if(mimeType.equals("audio/wav")){
        mp3ToWav();
    }else if(mimeType.equals("audio/ogg")){
        ...
    }else if(...){
    ... //More if and else here
}

我缩短了我的代码,因为它有很多else if语句,什么设计模式适合删除许多if和else或else if语句?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-03 18:17:11

你可以有一个Converter接口。然后,您可以为每个Mimetype创建一个类,如下所示:

代码语言:javascript
复制
public interface Converter {

    public void convertToMp3();
    public void convertToOgg();

}

public class MpegConverter implements Converter {

    public void convertToMp3() {
        //Code here
    }

    public void convertToOgg() {
        //Code here
    }

}

对于每个转换器,您都需要一个类似这样的类。然后,您可以像这样设置一个地图:

代码语言:javascript
复制
Map<String, Converter> mimeTypeMap = new HashMap<String, Converter>();

mimeTypeMap.put("audio/mpeg", new MpegConverter());

然后,您的convertToMp3方法如下所示:

代码语言:javascript
复制
Converter converter = mimeTypeMap.get(mimeType);
converter.convertToMp3();

使用这种方法,您可以在将来轻松地添加不同的转换器。

所有这些都未经测试,可能无法编译,但您已经明白了

票数 192
EN

Stack Overflow用户

发布于 2013-01-03 18:28:28

如果您使用JDK7之前的版本,则可以为所有MIME类型添加枚举:

代码语言:javascript
复制
  public static enum MimeTypes {
      MP3, WAV, OGG
  }

  public class Stuff {
      ...
      switch (MimeTypes.valueOf(mimeType)) {
          case MP3: handleMP3(); break;
          case WAV: handleWAV(); break;
          case OGG: handleOGG(); break;
      }
  }

并查看堆栈溢出问题,了解如何将字符串转换为枚举。

票数 23
EN

Stack Overflow用户

发布于 2013-01-08 21:59:48

考虑使用策略设计模式和Map来调度到适当的策略。如果除了特定mimeType的转换之外,您还需要额外的功能,或者转换器很大且很复杂,并且您希望将每个转换器放在其自己的.java文件中,则这一点尤其有用。

代码语言:javascript
复制
 interface Convertor {
    void convert(File src, File target);
 }

 private static void convertWav(File src, File target) {
    ...
 }

 ...

 private static final Map< String, Convertor > convertors = new ...;
 static {
    convertors.put("audio/wav", new Convertor {
       void convert(File src, File target) {
          convertWav(src, target);
       }
    });
    convertors.put("audio/ogg", new Convertor {
       void convert(File src, File target) {
          convertOgg(src, target);
       }
    });
    ...
 }

 public void convertToMp3(File src, File target, String mimeType){
     final Convertor convertor = convertors.get(mimeType);
     if (convertor == null ) {
        ...
     } else {
        convertor.convert(src, target);
     }
 }
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14136721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档