将许多“if else”语句转换为更清晰的方法我的代码在这里检测是否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和else或if语句?
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
你可以有一个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();
使用这种方法,您可以在将来轻松添加不同的转换器。
所有未经测试的,可能都没有编译,但你明白了
慕田峪9158850
TA贡献1794条经验 获得超7个赞
考虑使用策略设计模式和a 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); } }
添加回答
举报
0/150
提交
取消