我这里的代码检测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语句?
发布于 2013-01-03 18:17:11
你可以有一个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();
使用这种方法,您可以在将来轻松地添加不同的转换器。
所有这些都未经测试,可能无法编译,但您已经明白了
发布于 2013-01-03 18:28:28
如果您使用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;
}
}
并查看堆栈溢出问题,了解如何将字符串转换为枚举。
发布于 2013-01-08 21:59:48
考虑使用策略设计模式和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);
}
}
https://stackoverflow.com/questions/14136721
复制相似问题