Latest web development tutorials

adaptador Modelo

modo de adaptador (Adapter Padrão) como uma ponte entre duas interfaces incompatíveis. Este tipo de padrões de projeto pertencem modelo estrutural, que combina as características de duas interfaces separadas.

Este modelo envolve uma única classe que é responsável por funções de interface incompatíveis independentes ou participar. Por exemplo na vida real, como um leitor de cartão de memória é o adaptador e laptop entre. O seu cartão de memória no leitor, em seguida, o leitor para o notebook, de modo que o cartão de memória pode ser lido através do notebook.

Demonstramos o uso do modo de adaptador por meio dos exemplos seguintes. Em que o dispositivo leitor de áudio só pode reproduzir arquivos MP3 para reproduzir arquivos vlc e mp4 usando um leitor de áudio mais avançado.

introdução

Intenção: converter a interface de uma classe para outra interface de clientes esperam.padrão Adapter faz essas classes de outra forma por causa das interfaces incompatíveis não podem trabalhar em conjunto para trabalhar em conjunto.

Principalmente para resolver: a principal solução no sistema de software, muitas vezes para alguns dos "objeto existente" em um novo ambiente, novas exigências ambientais ea interface é agora o objeto não podem ser cumpridas.

Quando se deve utilizar: 1, o sistema requer a utilização de uma classe existente, e essas interfaces não satisfazem as necessidades do sistema.2, quer criar uma classe pode ser reutilizado para, incluindo alguns podem trabalhar com algumas das classes não é muito relacionados entre si no futuro introdução da classe, essas classes não têm necessariamente a mesma interface de origem. 3, através do conversor de interface, uma classe em outra linhas de classe. (Tais como tigres e pássaros, agora mais do que um tigre, sem aumentar as entidades de demanda no âmbito de um adaptador adicional, em que um tigre objetos, inclusive, implementar a interface mosca.)

Como corrigir: Herdado ou dependência (recomendado).

O código de chave: herança adaptador ou dependentes objetos que já existem para alcançar a interface alvo desejado.

Exemplos de aplicação: 1, os Estados Unidos Elétrica 110V, 220V China, deve haver um adaptador de 110V em 220V.2, Java JDK 1.1 fornece a interface enumeração e fornece a interface Iterator em 1.2, que pretende utilizar o 1.2 JDK, antes que o sistema terá de ser convertida para a interface de interface Iterator enumeração, então você precisa de um padrão de adaptador. 3, execute o programa no Windows Linux. 4, JAVA em jdbc.

Vantagens: 1, pode fazer qualquer tipo de correr juntos dois independentes.2, melhorar a reutilização de classe. 3, aumentar a transparência da classe. 4, boa flexibilidade.

Desvantagens: 1, o uso excessivo da placa, tornando o sistema muito confuso e difícil de entender o todo.Por exemplo, a chamada é claramente visto Um interface, de fato, ser adaptado para alcançar interface interna B tornou-se um sistema se isso acontece muito, é equivalente a um desastre. Então, se não é necessário, você não pode usar um adaptador, mas diretamente para o sistema reconstruído. 2. Como no máximo JAVA herdar uma classe, então o melhor adaptação adaptação por uma classe, e deve atingir classe é uma classe abstrata.

cenários de uso: Há uma motivação para modificar o funcionamento normal da interface do sistema, então você deve considerar usando o modo de adaptador.

Nota: O adaptador não é adicionada quando o projeto detalhado, mas para resolver o problema em projetos de serviço.

realização

Temos uma interfaceMediaPlayer,e uma realização da classe de entidade de interfaceAudioPlayerMediaPlayer. Porpadrão,AudioPlayer pode jogar mp3 formato de arquivo de áudio.

Temos também uma outraAdvancedMediaPlayerinterface e classes de entidade implementadasAdvancedMediaPlayerinterface. Esta classe pode jogar o vlc arquivo e formatos MP4.

Queremos fazerAudioPlayerreproduzir arquivos de áudio para outros formatos. Para conseguir isso, precisamos criar uma classe adaptadora implementa a interfaceMediaAdapterMediaPlayer e usarAdvancedMediaPlayerobjeto para reproduzir o formato desejado.

AudioPlayerusando uma classe de adaptadorMediaAdaptertransferir o tipo de áudio desejado, não precisa saber o formato da classe real pode jogar necessidades de áudio.AdapterPatternDemo,nossas aulas de demonstração usando classAudioPlayerpara jogar uma variedade de formatos.

padrão Adapter UML diagrama

passo 1

Jogadores e player de mídia mais avançada para criar uma interface para a mídia.

MediaPlayer.java

MediaPlayer interface pública {
   jogo public void (String audioType, String fileName);
}

AdvancedMediaPlayer.java

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

passo 2

Criar classes de entidade realizados interface deAdvancedMediaPlayer.

VlcPlayer.java

classe pública VlcPlayer implementa AdvancedMediaPlayer {
   @Override
   public void playVlc (String fileName) {
      System.out.println ( "Jogando vlc Nome do arquivo :." + FileName);		
   }

   @Override
   playMp4 public void (string arquivo) {
      // Não fazer nada}
}

Mp4Player.java

classe pública MP4player implementa AdvancedMediaPlayer {

   @Override
   public void playVlc (String fileName) {
      // Não fazer nada}

   @Override
   playMp4 public void (string arquivo) {
      System.out.println ( "Playing arquivo MP4 Nome :." + FileName);		
   }
}

passo 3

Crie uma classeMediaPlayerimplementa o adaptador de interface.

MediaAdapter.java

classe pública MediaAdapter implementa MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

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

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

passo 4

Criar classes de entidade realizados interface deMediaPlayer.

AudioPlayer.java

classe pública AudioPlayer implementa MediaPlayer {
   MediaAdapter mediaAdapter; 

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

      // Ouvir música MP3, suporte embutido if (audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "Playing arquivo mp3 Nome :." + FileName);			
      } 
      // MediaAdapter fornece reproduzir outros formatos de arquivos suportados else if (audioType.equalsIgnoreCase ( "vlc") 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = new MediaAdapter (audioType);
         mediaAdapter.play (audioType, fileName);
      }
      else {
         System.out.println ( "media inválido." +
            audioType + "formato não suportado");
      }
   }   
}

passo 5

AudioPlayer usar para reproduzir diferentes tipos de formatos de áudio.

AdapterPatternDemo.java

AdapterPatternDemo classe pública {
   main (String [] args) public static void {
      AudioPlayer AudioPlayer AudioPlayer = new ();

      audioPlayer.play ( "mp3", "além do horizon.mp3");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "vlc", "muito, muito away.vlc");
      audioPlayer.play ( "avi", "mente me.avi");
   }
}

passo 6

Verifique saída.

Jogando Nome do arquivo mp3 :. Além do horizon.mp3
Jogando mp4 arquivo Nome :. Alone.mp4
Jogando vlc arquivo Nome :. Longe, muito away.vlc
media inválidos. formato AVI não suportada