Latest web development tutorials

Adapter Modèle

mode adaptateur (Pattern Adapter) comme un pont entre deux interfaces incompatibles. Ce type de modèles de conception appartiennent modèle structurel, qui combine les caractéristiques des deux interfaces distinctes.

Ce modèle implique une seule classe qui est responsable des fonctions d'interface incompatibles indépendants ou d'y adhérer. Par exemple la vie réelle, comme un lecteur de carte mémoire est l'adaptateur et l'ordinateur portable entre les deux. Votre carte mémoire dans le lecteur, puis le lecteur dans l'ordinateur portable, de sorte que la carte mémoire peut être lue par l'ordinateur portable.

Nous démontrons l'utilisation du mode d'adaptateur par les exemples suivants. Dans lequel le dispositif de lecture audio ne peut lire les fichiers mp3 pour lire des fichiers vlc et mp4 en utilisant un lecteur audio plus avancé.

introduction

Intention: pour convertir l'interface d'une classe dans une autre interface clients attendent.motif adaptateur rend ces classes autrement en raison des interfaces incompatibles ne peuvent pas travailler ensemble pour travailler ensemble.

Principalement pour résoudre: la principale solution dans le système logiciel, souvent à certains des "objet existant" dans un nouvel environnement, de nouvelles exigences environnementales et l'interface est maintenant l'objet ne peut pas être atteint.

Quand l'utiliser: 1, le système nécessite l'utilisation d'une classe existante, et ces interfaces ne répondent pas aux besoins du système.2, veulent créer une classe peut être réutilisé pour, y compris certains pourraient travailler avec certaines des classes est pas beaucoup liés les uns aux autres dans l'introduction future de la classe, ces classes ne sont pas nécessairement la même interface source. 3, par l'intermédiaire du convertisseur d'interface, une classe dans une autre classe lignes. (Tels que les tigres et les oiseaux, maintenant plus d'un tigre, sans augmenter les entités de la demande en vertu d'un adaptateur supplémentaire, dans lequel un tigre objets inclus, mettre en œuvre l'interface de mouche.)

Comment corriger: Hérité ou de dépendance (recommandé).

Les codes clés: adaptateur d' héritage ou dépendantes des objets qui existent déjà pour réaliser l'interface cible souhaitée.

Exemples d'application: 1, les États-Unis électrique 110V, 220V Chine, il devrait y avoir un adaptateur 110V en 220V.2, JAVA JDK 1.1 fournit l'interface Enumeration et fournit l'interface Iterator en 1.2, vous souhaitez utiliser le 1.2 JDK, avant que le système devra être converti en Enumeration Interface interface Iterator, alors vous avez besoin d'un modèle d'adaptateur. 3, exécuter le programme sur WINDOWS LINUX. 4, JAVA JDBC.

Avantages: 1, peuvent faire toute sorte de course ensemble deux indépendants.2, d'améliorer la réutilisation de classe. 3, accroître la transparence de la classe. 4, une bonne flexibilité.

Inconvénients: 1, l' utilisation excessive de l'adaptateur, ce qui rend le système très salissant et difficile à saisir l'ensemble.Par exemple, l'appel est clairement visible Une interface, en fait, être adapté pour réaliser l'interface interne B est devenu un système si cela se produit trop, équivaut à une catastrophe. Donc, s'il ne faut pas, vous ne pouvez pas utiliser un adaptateur, mais directement au système reconstruit. 2. Comme au plus JAVA héritent d'une classe, donc, au mieux, l'adaptation de l'adaptation par une classe, et doit viser la classe est une classe abstraite.

Scénarios d' utilisation:Ily aune motivation pour modifier le fonctionnement normal interface du système, alors vous devriez envisager d' utiliser le mode de l' adaptateur.

Remarque: L'adaptateur est pas ajouté lors de la conception détaillée, mais pour résoudre le problème dans les projets de service.

réalisation

Nous avons une interfaceMediaPlayer,et une réalisation de l'interfaceAudioPlayerMediaPlayer de classe d'entité. Pardéfaut,AudioPlayer peut lire le format de fichier audio mp3.

Nous avons également un autreAdvancedMediaPlayerd'interface et classes d'entités mises en œuvreAdvancedMediaPlayerinterface. Cette classe peut jouer le vlc de fichiers et formats mp4.

Nous voulons faireAudioPlayerlire des fichiers audio vers d' autres formats. Pour ce faire , nous avons besoin de créer une classe d'adaptateur implémente l' interfaceMediaAdapterMediaPlayer et utiliser l' objetAdvancedMediaPlayerpour jouer le format souhaité.

AudioPlayeren utilisant une classe d'adaptateurMediaAdaptertransférer le type audio souhaité, n'a pas besoin de connaître le format de la classe réelle peut jouer besoins audio.AdapterPatternDemo,nos classes de démonstration à l' aide de classeAudioPlayerpour jouer une variété de formats.

motif Adapter diagramme UML

Etape 1

Les joueurs et lecteur multimédia plus avancé pour créer une interface pour les médias.

MediaPlayer.java

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

AdvancedMediaPlayer.java

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

Etape 2

Créer des classes d'entités réalisées InterfaceAdvancedMediaPlayer.

VlcPlayer.java

public class VlcPlayer implémente AdvancedMediaPlayer {
   @Override
   public void playVlc (String fileName) {
      System.out.println ( "Jouer vlc Nom de fichier :." + FileName);		
   }

   @Override
   playMp4 public void (String fileName) {
      // Ne rien faire}
}

Mp4Player.java

Mp4Player public class implémente AdvancedMediaPlayer {

   @Override
   public void playVlc (String fileName) {
      // Ne rien faire}

   @Override
   playMp4 public void (String fileName) {
      System.out.println ( "Jouer fichier mp4 Nom :." + FileName);		
   }
}

Etape 3

Créer une classeMediaPlayerimplémente l'adaptateur d'interface.

MediaAdapter.java

MediaAdapter public class implémente MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

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

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

Etape 4

Créer des classes d'entités réalisées InterfaceMediaPlayer.

AudioPlayer.java

AudioPlayer public class implémente MediaPlayer {
   MediaAdapter mediaAdapter; 

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

      // Lecture de fichiers de musique mp3, prise en charge intégrée si (audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "Jouer fichier mp3 Nom :." + FileName);			
      } 
      // MediaAdapter fournit jouer à d'autres formats de fichiers pris en charge else if (audioType.equalsIgnoreCase ( «vlc») 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = new MediaAdapter (audioType);
         mediaAdapter.play (audioType, fileName);
      }
      else {
         System.out.println ( "des médias non valides." +
            audioType + "format non supporté");
      }
   }   
}

Etape 5

AudioPlayer utiliser pour jouer différents types de formats audio.

AdapterPatternDemo.java

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

      audioPlayer.play ( "mp3", "au-delà du horizon.mp3");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "vlc", "far far away.vlc»);
      audioPlayer.play ( «avi», «l'esprit me.avi");
   }
}

Etape 6

Vérifiez la sortie.

Jouer fichier mp3 Nom :. Beyond the horizon.mp3
Alone.mp4 de jouer mp4 fichier Nom
Jouer vlc Nom de fichier :. Far far away.vlc
médias non valides. de format AVI non pris en charge