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

标签 java design-patterns

我的代码检测是否 mimeType等于一些MIME type,如果是,就会做一定的转换

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语句,什么设计模式适合删除许多ifelse> 或 else if 语句?

最佳答案

您可以有一个Converter接口(interface)。然后你可以为每个 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 :

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

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

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

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

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

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

关于java - 将许多 'if else' 语句转换为更简洁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56875607/

相关文章:

java - log4j2 不写入文件

java - Swing 中的后台线程

java - 在 Java 中获取 "unixtime"

c# - 带有中间变量的构造函数链接

python - 如何避免过多的参数传递?

c# - 如何避免多个嵌套 IF

java - 无法从 Vector<Object> 转换为 Integer

c++ - 在 C++ 中安全地传递对抽象类的引用

c++ - 工厂方法创建的对象应该在哪里删除?

java - OpenCV Android - 发生物体检测时如何播放声音?