Latest web development tutorials

Adapter Modell

Adaptermodus (Adapter Pattern) als Brücke zwischen zwei inkompatiblen Schnittstellen. Diese Art von Entwurfsmustern gehören Strukturmodell, das die Merkmale von zwei verschiedenen Schnittstellen verbindet.

Dieses Modell beinhaltet eine einzige Klasse, die für die unabhängige oder sich nicht kompatibel Schnittstellenfunktionen verantwortlich ist. Für Real-Life-Beispiel als Speicherkartenleser ist der Adapter und Laptop zwischen. Ihre Speicherkarte in das Lesegerät, dann wird der Leser in das Notebook, so dass die Speicherkarte kann über das Notebook gelesen werden.

Wir zeigen die Verwendung des Adaptermodus durch die folgenden Beispiele. Wobei der Audio-Player-Gerät kann nur MP3-Dateien abspielen zu vlc und MP4-Dateien mit Hilfe eines erweiterten Audio-Player abgespielt werden.

Einführung

Absichten: die Schnittstelle einer Klasse in eine andere Schnittstelle Kunden erwarten zu konvertieren.Adapter Muster macht diese Klassen sonst wegen inkompatibler Schnittstellen können nicht zusammenarbeiten, zusammen zu arbeiten.

Vor allem zu lösen: die Hauptlösung in das Softwaresystem, oft zu einigen der "bestehenden Objekt" in eine neue Umgebung, neue Umweltanforderungen und die Schnittstelle ist nun die Aufgabe nicht erfüllt werden können.

Wenn zu verwenden: 1, erfordert das System die Verwendung einer bestehenden Klasse und solche Schnittstellen erfüllen nicht die Anforderungen des Systems.2, soll eine Klasse zu erstellen, kann wiederverwendet werden, darunter auch einige mit einigen der Klassen funktionieren könnte, wird in der Zukunft Einführung der Klasse miteinander nicht viel verwandt, diese Klassen haben nicht unbedingt die gleiche Quelle-Schnittstelle. 3, durch die Schnittstellenkonverter, eine Klasse in eine andere Klasse Linien. (Wie Tiger und Vögel, jetzt mehr als ein Tiger, ohne dass die Nachfrage Einheiten unter einem zusätzlichen Adapter zu erhöhen, in dem ein Tiger inklusive Objekte, fly-Schnittstelle implementieren.)

Wie zu beheben: Vererbt oder Abhängigkeit (empfohlen).

Die Schlüsselcode: Adapter Vererbung oder abhängige Objekte , die bereits existieren , um die gewünschte Ziel Schnittstelle zu erreichen.

Anwendungsbeispiele: 1, die Vereinigten Staaten Elektrische 110V, 220V China, sollte es eine 110V - Adapter in 220V sein.2, JAVA JDK 1.1 bietet die Enumeration-Schnittstelle und bietet die Iterator-Schnittstelle in 1.2, können Sie die 1.2 JDK verwenden möchten, bevor das System konvertiert Enumeration-Schnittstelle Iterator-Schnittstelle werden müssen, dann benötigen Sie einen Adapter-Muster. 3 Führen Sie das Programm unter Windows LINUX. 4, JAVA in jdbc.

Vorteile: 1, kann jede Art von Lauf machen zusammen zwei unabhängig.2, die Verbesserung der Klasse Wiederverwendung. 3, erhöhen die Transparenz der Klasse. 4, gute Flexibilität.

Nachteile: 1, übermäßige Verwendung des Adapters, das System sehr chaotisch und schwierig macht , das Ganze zu erfassen.Zum Beispiel wird der Anruf eindeutig eine Schnittstelle zu sehen ist, in der Tat zu erzielen B interne Schnittstelle angepasst ist zu einem System, wenn das zu viel geschieht, ist zu einer Katastrophe gleich. Also, wenn es nicht notwendig ist, können Sie einen Adapter nicht verwenden, sondern direkt an das System rekonstruiert. 2. Wie bei den meisten JAVA eine Klasse erben, so bestenfalls Anpassung Anpassung durch eine Klasse und muss Zielklasse eine abstrakte Klasse ist.

Einsatzszenarien: Es gibt eine Motivation istdie Schnittstelle des normalen Betriebs des Systems zu ändern, dann sollten Sie mit Adapter - Modus betrachten.

Hinweis: Der Adapter wird nicht hinzugefügt , wenn die Detailplanung, aber das Problem in Service - Projekten zu lösen.

Realisierung

Wir haben eineMediaplayer- Schnittstelle und eine Realisierung der Entity - KlasseAudioplayerMediaplayer - Schnittstelle. In derStandardeinstellungMP3 - Audio - Datei - Format abspielen Audioplayer kann.

Wir haben auch eine andere SchnittstelleAdvancedMediaPlayerund implementiert EntitätsklassenAdvancedMediaPlayerSchnittstelle. Diese Klasse kann die Datei vlc-und MP4-Formate abspielen.

Wir wollenAudioplayerin andere Formate Audio-Dateien zu machen spielen. Um dies zu erreichen, brauchen wir eine Adapter - Klasse zu erstellen implementiertMediaAdapterMediaplayer - Schnittstelle und verwendenAdvancedMediaPlayerObjekt , um das gewünschte Format zu spielen.

Audioplayereine Adapter - Klasse mitMediaAdapterdie gewünschte Audiotyp übertragen, brauchen nicht das Format der aktuellen Klasse zu wissen , können Audio - Anforderungen spielen.AdapterPatternDemo,unsere Demonstration KlassenAudioplayer- Klasse unter Verwendung einer Vielzahl von Formaten zu spielen.

Adapter-Muster UML-Diagramm

Schritt 1

Spieler und erweiterte Media-Player eine Schnittstelle für die Medien zu schaffen.

MediaPlayer.java

öffentliche Schnittstelle Mediaplayer {
   public void play (String audioType, String filename);
}

AdvancedMediaPlayer.java

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

Schritt 2

Erstellen von Entity - KlassenAdvancedMediaPlayerSchnittstelle realisiert.

VlcPlayer.java

public class VlcPlayer implementiert AdvancedMediaPlayer {
   @Override
   public void playVlc (String filename) {
      System.out.println ( "Spielen vlc-Datei Name :." + Filename);		
   }

   @Override
   public void playMp4 (String filename) {
      // Nichts tun}
}

Mp4Player.java

public class MP4player implementiert AdvancedMediaPlayer {

   @Override
   public void playVlc (String filename) {
      // Nichts tun}

   @Override
   public void playMp4 (String filename) {
      System.out.println ( "Wiedergabe von MP4-Datei-Name :." + Filename);		
   }
}

Schritt 3

Erstellen Sie eineMediaplayer- Klasse implementiert den Schnittstellenadapter.

MediaAdapter.java

public class MediaAdapter implementiert 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);
      }
   }
}

Schritt 4

Erstellen von Entity - KlassenMediaplayer- Schnittstelle.

AudioPlayer.java

public class Audioplayer implementiert Mediaplayer {
   MediaAdapter mediaAdapter; 

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

      // MP3-Musikdateien abspielen, eingebaute Unterstützung if (audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "Wiedergabe von MP3-Dateiname :." + Filename);			
      } 
      // MediaAdapter bietet unterstützt auch andere Dateiformate wiedergeben, wenn (audioType.equalsIgnoreCase ( "vlc") 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = new MediaAdapter (audioType);
         mediaAdapter.play (audioType, filename);
      }
      else {
         System.out.println ( "Ungültige Medien." +
            audioType + "Format wird nicht unterstützt");
      }
   }   
}

Schritt 5

Audioplayer verwenden, um verschiedene Arten von Audio-Formate abspielen.

AdapterPatternDemo.java

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

      audioPlayer.play ( "mp3", "jenseits des horizon.mp3");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "vlc", "weit, weit away.vlc");
      audioPlayer.play ( "avi", "Geist me.avi");
   }
}

Schritt 6

Stellen Sie sicher, ausgegeben.

Abspielen von MP3-Datei Name :. Jenseits der horizon.mp3
Spielen mp4-Datei Name :. Alone.mp4
vlc-Datei Name Spielen :. Far weit away.vlc
Ungültige Medien. Avi-Format nicht unterstützt