将许多“如果还有”语句转换为更清晰的方法

2022-08-31 09:27:55

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

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
}

我已经缩短了我的代码,因为它有很多其他的if语句,什么设计模式适合删除许多if否则否则if语句?


答案 1

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

public interface Converter {

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

}

public class MpegConverter implements Converter {

    public void convertToMp3() {
        //Code here
    }

    public void convertToOgg() {
        //Code here
    }

}

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

Map<String, Converter> mimeTypeMap = new HashMap<String, Converter>();

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

然后你的方法变成这样:convertToMp3

Converter converter = mimeTypeMap.get(mimeType);
converter.convertToMp3();

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

所有未经测试,可能没有编译,但你明白了


答案 2

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

  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;
      }
  }

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


推荐