这里我的代码检测< code>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
}
我把代码缩短了,因为它有很多else if语句,什么设计模式适合去掉很多if和else或者else if语句?
考虑使用策略设计模式和Map
分派到适当的策略。如果您需要额外的功能,除了特定mimeType
的转换之外,或者转换器是大而复杂的代码,并且您希望将每个转换器放在自己的. java
文件中,这将特别有用。
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);
}
}
如果使用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-将字符串转换为枚举,了解如何将字符串转换为枚举。
您可以有一个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());
然后,您的< code>convertToMp3方法变成这样:
Converter converter = mimeTypeMap.get(mimeType);
converter.convertToMp3();
使用这种方法,您将来可以轻松添加不同的转换器。
所有未经测试,可能无法编译,但你得到的想法
问题内容: 我的代码在这里检测the 是否等于某种MIME类型,如果是,它将进行一定的转换 我缩短了代码,因为它包含许多其他if语句,哪种设计模式适合于删除许多if and else or else if语句? 问题答案: 你可以有一个接口。然后,你可以为每个Mimetype创建一个类,如下所示: 每个转换器都需要一个这样的类。然后,你可以像这样设置地图: 然后,你的convertToMp3方法将
问题内容: 像这样的MySQL查询: 我想将其转换为雄辩的laravel,但我很困惑。因为存在很多陈述。存在,,,等你可以看到上面的查询 如何将其转换为雄辩的laravel? 问题答案: 主要是原始查询: 尝试这个:
问题内容: 例如,我目前正在这样做: 你能打败这个吗? 问题答案:
问题内容: 在我的应用程序中,我使用3rd party库(确切地说是MongoDB的Spring数据)。 该库的方法返回,而我的其他代码则期望。 有什么实用方法可以让我快速将一个转换为另一个吗?我想避免foreach在代码中创建这么简单的循环。 问题答案: 在JDK 8+中,不使用任何其他库: 编辑:上面的是Iterator。如果您正在处理Iterable,
问题内容: 假设我有一个包含要转换为指标的字符串的数据框。我用来将其转换为现在可用于构建模型的数据集。 现在,我有一个新的观察值,我想遍历我的模型。显然,我无法使用它,因为它不包含所有类,并且不会创建相同的指标矩阵。有什么好方法吗? 问题答案: 您可以从单个新观察值创建虚拟对象,然后使用原始指标矩阵中的列重新索引此框架列: 返回:
问题内容: 我通常这样做是将字符串转换为int: 但我想知道是否有一种比较笨拙的方法,因为它感觉很长。 问题答案: 没有比使用该函数更短的方法了(如您所述)