將許多“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
提交
取消