一尘不染

Java将许多“if else”语句转换为更干净的方法

java

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

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 and else or else if语句?


阅读 451

收藏
2020-03-12

共1个答案

一尘不染

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

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();

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

全部未经测试,可能无法编译,但是你明白了

2020-03-12