111 votes

Conversion de nombreuses déclarations 'if else' en une approche plus propre

Mon code ici détecte si le mimeType est égal à un type MIME , si c'est le cas, il effectuera une certaine conversion

 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
}
 

J'ai raccourci mon code, car il y a beaucoup d' autres instructions if , Quel modèle de conception convient à la suppression de nombreuses instructions if et else sinon if ?

192voto

cowls Points 10489

Vous pourriez avoir un Converter interface. Ensuite, vous pouvez créer une classe pour chaque type mime comme:

public interface Converter {

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

}

public class MpegConverter implements Converter {

    public void convertToMp3() {
        //Code here
    }

    public void convertToOgg() {
        //Code here
    }

}

Vous avez besoin d'une classe de ce genre pour chaque convertisseur. Ensuite, vous pouvez configurer une carte comme ceci:

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

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

Ensuite, votre convertToMp3 méthode devient comme ceci:

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

À l'aide de cette approche que l'on pourrait facilement ajouter différents convertisseurs dans l'avenir.

Tous les non-testés, probablement ne compile pas, mais vous voyez l'idée

23voto

pgras Points 7202

Si vous utilisez une version antérieure à JDK7, vous pouvez ajouter une énumération pour tous les types 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;
      }
  }
 

Et jetez un coup d'œil à la question de débordement de pile Java - Convert String en enum sur la conversion des chaînes en enum.

15voto

Raedwald Points 8862

Envisagez d’utiliser le modèle de conception de stratégie et un d’expédier à la stratégie appropriée. Particulièrement utile si vous vous avez besoin des fonctionnalités supplémentaires, en plus d’une conversion pour un particulier , ou les convertisseurs sont grand et compliqué le code et vous voudriez placer chaque convertisseur dans sa propre `` fichier.

3voto

Marcin Szymczak Points 1945

Si vous exécutez les mêmes méthodes pour chaque cas vous devriez vérifier le motif de l’État

2voto

Azodious Points 8187

Si vous utilisez , vous pouvez utiliser construire :

Voir : instruction Switch avec des chaînes en Java

Pour les versions antérieures, `` est le seul choix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X