Latest web development tutorials

Modelo adaptador

modo de adaptador (patrón adaptador) como un puente entre dos interfaces incompatibles. Este tipo de patrones de diseño pertenecen modelo estructural, que combina las características de dos interfaces separadas.

Este modelo implica una sola clase que se encarga de las funciones de interfaz incompatibles independientes o unirse. Por ejemplo en la vida real, como un lector de tarjetas de memoria es el adaptador portátil y el medio. Su tarjeta de memoria en el lector, entonces el lector en el bloc de notas, por lo que la tarjeta de memoria se puede leer a través del cuaderno.

Demostramos la utilización del modo de adaptador mediante los siguientes ejemplos. En el que el dispositivo reproductor de audio sólo puede reproducir archivos mp3 para reproducir archivos de VLC y mp4 mediante el uso de un reproductor de audio más avanzada.

introducción

Intención: convertir la interfaz de una clase en otra interfaz clientes esperan.patrón adaptador hace que estas clases de otra forma a causa de las interfaces incompatibles no pueden trabajar juntos para trabajar en conjunto.

Principalmente para resolver: la solución principal en el sistema de software, a menudo a algunos de los "objeto existente" en un nuevo entorno, nuevas exigencias ambientales y la interfaz es ahora el objeto no se puede cumplir.

Cuándo utilizar: 1, el sistema requiere el uso de una clase existente, y dichas interfaces no cumplen con las necesidades del sistema.2, quieren crear una clase puede ser reutilizado para, incluyendo algunos podrían trabajar con algunas de las clases que no tiene mucho que ver entre sí en la futura introducción de la clase, estas clases no tienen necesariamente la misma interfaz de origen. 3, a través del convertidor de interfaz, una clase en otro líneas de clase. (Tales como los tigres y aves, ahora más que un tigre, sin aumentar las entidades de demanda en virtud de un adaptador adicional, en el que un tigre objetos inclusivos, implementan la interfaz mosca.)

Cómo solucionarlo: Factores hereditarios o dependencia (recomendado).

Los códigos de teclas: la herencia adaptador o dependientes de objetos que ya existen para lograr la interfaz de destino deseado.

Ejemplos de aplicación: 1, los Estados Unidos eléctrica de 110V, 220V de China, no debe haber un adaptador de 110V a 220V.2, Java JDK 1.1 proporciona la interfaz de enumeración y proporciona la interfaz de iteración de 1.2, que desea utilizar el JDK 1.2, antes de que el sistema tendrá que ser convertido a la interfaz de la interfaz Iterator enumeración, a continuación, se necesita un patrón adaptador. 3, ejecutar el programa en Windows Linux. 4, JAVA en JDBC.

Ventajas: 1, pueden realizar cualquier tipo de carrera juntos dos partes no vinculadas.2, mejorar la reutilización de clases. 3, aumentar la transparencia de la clase. 4, buena flexibilidad.

Desventajas: 1, el uso excesivo del adaptador, haciendo que el sistema sea muy complicado y difícil de entender del todo.Por ejemplo, la llamada se ve claramente una interfaz, de hecho, ser adaptado para alcanzar interfaz interna B se ha convertido en un sistema si esto ocurre demasiado, es equivalente a un desastre. Así que si no es necesario, no se puede utilizar un adaptador, sino directamente al sistema reconstruido. 2. Al igual que en la mayoría de JAVA heredan de una clase, por lo que en el mejor de adaptación adaptación de una clase, y debe tener como destino de clase es una clase abstracta.

Escenarios de uso: Hay una motivación para modificar el funcionamiento normal del sistema de interfaz, entonces debería considerar el uso de modo de adaptador.

Nota: El adaptador no se añade cuando el diseño detallado, pero para resolver el problema en proyectos de servicio.

realización

Tenemos una interfazMediaPlayer,y una realización de la clase entidad de interfazAudioPlayerMediaPlayer. Deforma predeterminada,AudioPlayer puede reproducir el formato de archivo de audio mp3.

También tenemos otroAdvancedMediaPlayerinterfaz y las clases de entidad implementadasAdvancedMediaPlayerinterfaz. Esta clase se puede reproducir el archivo de VLC y MP4.

Queremos hacerAudioPlayerreproducir archivos de audio a otros formatos. Para lograr esto, necesitamos crear una clase adaptador implementa la interfazMediaAdapterMediaPlayer y el uso de objetosAdvancedMediaPlayerpara reproducir el formato deseado.

AudioPlayerusar una clase adaptadorMediaAdaptertransferir el tipo de audio deseado, no es necesario conocer el formato de la clase real puede jugar necesidades de audio.AdapterPatternDemo,nuestras clases de demostración utilizando la claseAudioPlayerpara reproducir una variedad de formatos.

patrón adaptador diagrama UML

Paso 1

Los jugadores y el reproductor multimedia más avanzados para crear una interfaz para los medios de comunicación.

MediaPlayer.java

MediaPlayer interfaz pública {
   juego public void (String AudioType, Cadena nombre del archivo);
}

AdvancedMediaPlayer.java

AdvancedMediaPlayer interfaz pública {	
   public void playVlc (String filename);
   playMp4 public void (String filename);
}

Paso 2

Crear clases de entidad realizados interfazAdvancedMediaPlayer.

VlcPlayer.java

clase pública implementa VlcPlayer AdvancedMediaPlayer {
   @ Override
   playVlc public void (String filename) {
      System.out.println ( "Dale nombre del archivo VLC :." + nombre del archivo);		
   }

   @ Override
   pública playMp4 vacío (string filename) {
      // No hacer nada}
}

Mp4Player.java

MP4player clase pública implementa AdvancedMediaPlayer {

   @ Override
   playVlc public void (String filename) {
      // No hacer nada}

   @ Override
   pública playMp4 vacío (string filename) {
      System.out.println ( "Reproducción de archivos mp4 Nombre :." + nombre del archivo);		
   }
}

paso 3

Crear una claseMediaPlayerimplementa el adaptador de interfaz.

MediaAdapter.java

MediaAdapter clase pública implementa MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   MediaAdapter pública (String AudioType) {
      (si audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer = new VlcPlayer ();			
      } Else if (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer = new MP4player ();
      }	
   }

   @ Override
   juego public void (String AudioType, Cadena filename) {
      (si audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer.playVlc (nombre del archivo);
      } Else if (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer.playMp4 (nombre del archivo);
      }
   }
}

Paso 4

Crear clases de entidad realizados interfazMediaPlayer.

AudioPlayer.java

AudioPlayer clase pública implementa MediaPlayer {
   MediaAdapter mediaAdapter; 

   @ Override
   juego public void (String AudioType, Cadena filename) {		

      // Reproduce archivos de música MP3, soporte integrado de si (audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "Reproducción de archivos MP3 Nombre :." + nombre del archivo);			
      } 
      // MediaAdapter proporciona reproducir otros formatos de archivo compatibles else if (audioType.equalsIgnoreCase ( "VLC") 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = new MediaAdapter (AudioType);
         mediaAdapter.play (AudioType, nombre de archivo);
      }
      else {
         System.out.println ( "medios no válidos". +
            AudioType + "formato no soportado");
      }
   }   
}

paso 5

AudioPlayer utilizar para reproducir diferentes tipos de formatos de audio.

AdapterPatternDemo.java

AdapterPatternDemo public class {
   principales argumentos (String []) {public static void
      AudioPlayer AudioPlayer AudioPlayer = new ();

      audioPlayer.play ( "mp3", "más allá de la horizon.mp3");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "VLC", "muy, muy away.vlc");
      audioPlayer.play ( "avi", "mente me.avi");
   }
}

paso 6

Verifique la salida.

Dale nombre del archivo mp3 :. Más allá de la horizon.mp3
Reproducción de archivos mp4 Nombre :. Alone.mp4
Reproducción de archivo Nombre VLC :. Lejos muy away.vlc
los medios de comunicación no son válidos. formato AVI no son compatibles