將許多“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條經驗 獲得超8個贊
考慮使用策略設計模式和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
提交
取消
