Modèles de conception - Modèle d'adaptateur

Le modèle d'adaptateur fonctionne comme un pont entre deux interfaces incompatibles. Ce type de modèle de conception relève d'un modèle structurel car ce modèle combine la capacité de deux interfaces indépendantes.

Ce modèle implique une seule classe qui est chargée de joindre les fonctionnalités d'interfaces indépendantes ou incompatibles. Un exemple concret pourrait être un cas de lecteur de carte qui agit comme un adaptateur entre la carte mémoire et un ordinateur portable. Vous branchez la carte mémoire dans le lecteur de carte et le lecteur de carte dans l'ordinateur portable afin que la carte mémoire puisse être lue via un ordinateur portable.

Nous démontrons l'utilisation du modèle d'adaptateur via l'exemple suivant dans lequel un lecteur audio ne peut lire que des fichiers mp3 et souhaite utiliser un lecteur audio avancé capable de lire des fichiers vlc et mp4.

la mise en oeuvre

Nous avons une MediaPlayer interface et une classe de béton AudioPlayer mise en œuvre du MediaPlayer interface. AudioPlayer peut lire des fichiers audio au format mp3 par défaut.

Nous avons une autre interface AdvancedMediaPlayer et des classes concrètes implémentant l' interface AdvancedMediaPlayer . Ces classes peuvent lire des fichiers au format vlc et mp4.

Nous voulons que AudioPlayer puisse également lire d'autres formats. Pour y parvenir, nous avons créé une classe adaptateur MediaAdapter qui implémente l' MediaPlayer interface et utilisations AdvancedMediaPlayer objets pour lire le format requis.

AudioPlayer utilise la classe d'adaptateur MediaAdapter en lui passant le type audio souhaité sans connaître la classe réelle qui peut lire le format souhaité. AdapterPatternDemo , notre classe de démonstration utilisera la classe AudioPlayer pour lire différents formats.

Étape 1

Créez des interfaces pour Media Player et Advanced Media Player.

MediaPlayer.java

public interface MediaPlayer {
   public void play(String audioType, String fileName);
}

AdvancedMediaPlayer.java

public interface AdvancedMediaPlayer {	
   public void playVlc(String fileName);
   public void playMp4(String fileName);
}

Étape 2

Créez des classes concrètes mettant en œuvre l' interface AdvancedMediaPlayer .

VlcPlayer.java

public class VlcPlayer implements AdvancedMediaPlayer{
   @Override
   public void playVlc(String fileName) {
      System.out.println("Playing vlc file. Name: "+ fileName);		
   }

   @Override
   public void playMp4(String fileName) {
      //do nothing
   }
}

Mp4Player.java

public class Mp4Player implements AdvancedMediaPlayer{

   @Override
   public void playVlc(String fileName) {
      //do nothing
   }

   @Override
   public void playMp4(String fileName) {
      System.out.println("Playing mp4 file. Name: "+ fileName);		
   }
}

Étape 3

Créez une classe d'adaptateur implémentant l' interface MediaPlayer .

MediaAdapter.java

public class MediaAdapter implements MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   public MediaAdapter(String audioType){
   
      if(audioType.equalsIgnoreCase("vlc") ){
         advancedMusicPlayer = new VlcPlayer();			
         
      }else if (audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer = new Mp4Player();
      }	
   }

   @Override
   public void play(String audioType, String fileName) {
   
      if(audioType.equalsIgnoreCase("vlc")){
         advancedMusicPlayer.playVlc(fileName);
      }
      else if(audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer.playMp4(fileName);
      }
   }
}

Étape 4

Créez une classe concrète implémentant l' interface MediaPlayer .

AudioPlayer.java

public class AudioPlayer implements MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   public void play(String audioType, String fileName) {		

      //inbuilt support to play mp3 music files
      if(audioType.equalsIgnoreCase("mp3")){
         System.out.println("Playing mp3 file. Name: " + fileName);			
      } 
      
      //mediaAdapter is providing support to play other file formats
      else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){
         mediaAdapter = new MediaAdapter(audioType);
         mediaAdapter.play(audioType, fileName);
      }
      
      else{
         System.out.println("Invalid media. " + audioType + " format not supported");
      }
   }   
}

Étape 5

Utilisez AudioPlayer pour lire différents types de formats audio.

AdapterPatternDemo.java

public class AdapterPatternDemo {
   public static void main(String[] args) {
      AudioPlayer audioPlayer = new AudioPlayer();

      audioPlayer.play("mp3", "beyond the horizon.mp3");
      audioPlayer.play("mp4", "alone.mp4");
      audioPlayer.play("vlc", "far far away.vlc");
      audioPlayer.play("avi", "mind me.avi");
   }
}

Étape 6

Vérifiez la sortie.

Playing mp3 file. Name: beyond the horizon.mp3
Playing mp4 file. Name: alone.mp4
Playing vlc file. Name: far far away.vlc
Invalid media. avi format not supported