亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將許多“if else”語句轉換為更清晰的方法

將許多“if else”語句轉換為更清晰的方法

30秒到達戰場 2019-08-16 14:09:37
將許多“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();

使用這種方法,您可以在將來輕松添加不同的轉換器。

所有未經測試的,可能都沒有編譯,但你明白了


查看完整回答
反對 回復 2019-08-16
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

如果使用pre-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;
      }
  }


查看完整回答
反對 回復 2019-08-16
?
慕田峪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);
     }
 }


查看完整回答
反對 回復 2019-08-16
  • 3 回答
  • 0 關注
  • 802 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號