当前位置: 首页 > 面试题库 >

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

卢志强
2023-03-14
问题内容

我的代码在这里检测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语句?


问题答案:

你可以有一个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();

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

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



 类似资料:
  • 这里我的代码检测< code>mimeType是否等于某个MIME类型,如果是,它将进行某种转换 我把代码缩短了,因为它有很多else if语句,什么设计模式适合去掉很多if和else或者else if语句?

  • 问题内容: 当您使用很多术语时,以下语句看起来非常混乱: 有没有一种更干净的方式来执行相同的操作,我希望我的代码尽可能可读。 注意:x,y和z只是任何长度的任何字符串的占位符。如果条件中的每个条件进行或运算,则此处可能有20个长度可变的字符串术语 问题答案: Set stuff = new HashSet (); stuff.add(“x”); stuff.add(“y”); stuff.add(

  • 问题内容: 像这样的MySQL查询: 我想将其转换为雄辩的laravel,但我很困惑。因为存在很多陈述。存在,,,等你可以看到上面的查询 如何将其转换为雄辩的laravel? 问题答案: 主要是原始查询: 尝试这个:

  • 问题内容: 我发现的最短方法是: 我特别关注两个因素:可读性和可移植性。对于Python 3,第二种方法很难看。但是,我认为它可能是向后兼容的。 我错过了一种更短,更干净的方式吗?我目前使用一个lambda表达式来使用新功能对其进行修复,但这也许是不必要的。 问题答案: 答1: 要将字符串转换为Python 2或Python 3中的字节序列,请使用字符串的方法。如果您不提供编码参数,则该参数对于数

  • 我试过这种格式 但这似乎不起作用。

  • 问题内容: 我在标准库上进行了查找,但未发现类似问题。因此,有没有一种方法可以在不滚动我自己的函数的情况下进行以下操作?如果没有内置的方法,那么如果有人编写了精美的函数,奖励积分就可以了。 问题答案: 将用作: