Java >> Java tutorial >  >> Java

Konvertering af mange "hvis andet"-udsagn til en renere tilgang

Du kunne have en Converter interface. Så kan du oprette en klasse for hver Mimetype som:

public interface Converter {

    public void convertToMp3();
    public void convertToOgg();

}

public class MpegConverter implements Converter {

    public void convertToMp3() {
        //Code here
    }

    public void convertToOgg() {
        //Code here
    }

}

Du skal bruge en klasse som denne for hver konverter. Så kan du opsætte et kort som dette:

Map<String, Converter> mimeTypeMap = new HashMap<String, Converter>();

mimeTypeMap.put("audio/mpeg", new MpegConverter());

Derefter din convertToMp3 metode bliver sådan her:

Converter converter = mimeTypeMap.get(mimeType);
converter.convertToMp3();

Ved at bruge denne tilgang kan du nemt tilføje forskellige konvertere i fremtiden.

Alt sammen utestet, kompilerer sandsynligvis ikke, men du forstår det


Hvis du bruger præ-JDK7, kan du tilføje en enum for alle MIME-typer:

  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;
      }
  }

Og kig på Stack Overflow-spørgsmålet Java - Konverter streng til enum om, hvordan man konverterer strenge til enums.


Overvej at bruge strategidesignmønsteret og en Map at sende til den relevante strategi. Særligt nyttigt, hvis du får brug for yderligere funktionalitet ud over en konvertering for en bestemt mimeType , eller konverterne er store og komplicerede koder, og du ønsker at placere hver konverter i sin egen .java fil.

 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);
     }
 }

Java tag