Was ist die Adapterklasse in Java? Vorteile der Adapterklasse und ihrer Typen

Veröffentlicht: 2021-05-19

Inhaltsverzeichnis

Was ist eine Adapterklasse?

In JAVA ermöglicht eine Adapterklasse die Standardimplementierung von Listener-Schnittstellen. Der Begriff der Listener-Schnittstellen stammt aus dem Delegation Event Model. Es ist eine der vielen Techniken, die zur Behandlung von Ereignissen in Programmiersprachen für grafische Benutzeroberflächen (GUI) wie JAVA verwendet werden.

Die GUI-Programmierung ist überwiegend ereignisgesteuert, wobei der Benutzer mit dem System über zugehörige visuelle Elemente und Grafiken interagiert. Das bedeutet, dass jede vom Benutzer initiierte Aktivität, wie z. B. eine Mausbewegung, die die Koordinaten des Mauszeigers auf dem Bildschirm ändert, das Klicken auf eine Schaltfläche oder das Scrollen einer Seite, als unabhängiges Ereignis betrachtet wird.

Jede dieser unabhängigen Ereignisaktivitäten ist intrinsisch mit einem Codesegment verknüpft, das iteriert, welche Antwort die Anwendung dem Benutzer geben soll. Der Weg ist einfach. Der Benutzer (Quelle) generiert ein Ereignis und sendet es an eine oder mehrere Listener-Schnittstellen. Sobald ein Ereignispotential empfangen wird, verarbeitet die Listener-Schnittstelle das Ereignis und gibt die passende Antwort zurück.

Dieser Pfad konkretisiert den Prozess der Ereignisbehandlung. Eine Adapterklasse in JAVA wird daher verwendet, um eine Schnittstelle zu implementieren, die einen Satz von Dummy-Methoden hat. Wenn ein Programmierer sich dafür entscheidet, eine Adapterklasse zu erben, wird er nicht gezwungen, alle Methoden zu implementieren, die unter einer bestimmten Listener-Schnittstelle aufgelistet sind. Die Adapterklasse kann ferner in Unterklassen unterteilt werden, sodass der Programmierer nur erforderliche Methoden überschreiben kann. Mit anderen Worten, durch die Verwendung einer Adapterklasse kann der Programmierer schnell seine eigene Listener-Schnittstelle für Feldereignisse konstruieren. Dies hilft, Code zu sparen.

Welche Beziehung besteht zwischen einer Adapterklasse und einer Listener-Schnittstelle?

Listener werden verwendet, wenn der Programmierer beabsichtigt, die meisten der unter der Schnittstelle aufgeführten Methoden zu verwenden. Wenn eine Listener-Schnittstelle direkt von einer Klasse implementiert wird, müssen alle Methoden innerhalb dieser Schnittstelle implementiert werden, wodurch der Code unangemessen groß wird. Diese Komplexität kann gelöst werden, indem eine Adapterklasse aufgerufen wird. Eine Adapterklasse erweist sich in Fällen als unerlässlich, in denen ein Ereignis nur bestimmte Methoden erfordert.

Der Programmierer muss nur eine Unterklasse davon erstellen und die interessierenden Methoden überschreiben, um eine Adapterklasse zu verwenden. Adapterklassen sind daher vorteilhaft für Listener-Schnittstellen in JAVA, die mehr als eine Methode haben. Um dies besser zu verstehen, betrachten wir das Beispiel der MouseListener-Schnittstelle. Diese Schnittstelle wird benachrichtigt, wenn sich der Zustand der Maus ändert. Es hat fünf Methoden: Mouse Clicked, MouseExited, MouseEntered, MousePressed und MouseReleased.

Wenn bei einem Ereignis benachrichtigt wird, müssen alle implementiert werden, selbst wenn nur eine dieser Methoden erforderlich ist. Die nicht benötigten Methoden werden leer gehalten. Um diese unnötige Implementierung eines leeren Methodenkörpers zu vermeiden, wird eine Adapterklasse verwendet.

Verständnis des Adapter-Entwurfsmusters

Im nicht-technischen Sprachgebrauch ist ein Adapter per Definition strukturell so ausgelegt, dass zwei inkompatible Schnittstellen zusammenarbeiten können. Ein Adaptermuster ist daher in der Lage, zwei inkompatible Schnittstellen kompatibel zu machen, ohne ihren bestehenden Code zu ändern. Die entsprechenden Schnittstellen mögen uneinheitlich sein, ihre inneren Funktionalitäten sollten aber der gesuchten Anforderung entsprechen. Um dies besser zu verdeutlichen, betrachten wir ein relevantes Beispiel.

Wir sind uns bewusst, dass verschiedene Länder unterschiedliche Steckdosen, Spannungen und Frequenzmessungen haben. Wenn wir ein Gerät verwenden müssen, das gemäß den Spezifikationen eines Landes in einem anderen Land entwickelt wurde, müssen wir sicherstellen, dass das Gerät kompatibel ist.

In Großbritannien werden beispielsweise häufig Steckdosen vom Typ G verwendet, in den USA und Japan Steckdosen vom Typ A und Typ B und in Indien Typ C, Typ D und Typ M. Ein Laptop oder Mobilgerät, das aus Indien mitgeführt wird, wird verwendet daher nicht mit den elektrischen Spezifikationen von beispielsweise den USA und Japan kompatibel sein. Hier wird der Zweck eines Adapters wesentlich, einen inkompatiblen Code in einen kompatiblen Code umzuwandeln.

Arten von Adapterklassen

Adapterklassen finden Sie in Java. awt.the event-, java.awt.dnd- und java.swing.event-Pakete. Die Standard-Adapterklassen mit ihren entsprechenden Listener-Schnittstellen in JAVA werden unten für jedes dieser Pakete erwähnt.

1. Java. ach. Vorabend

Adapterklasse Listener-Schnittstelle
WindowAdapter WindowListener
KeyAdapter KeyListener
MouseAdapter MouseListener
MouseMotionAdapter MouseMotionListener
FocusAdapter FocusListener
KomponentenAdapter KomponentenListener
ContainerAdapter ContainerListener
HierarchyBoundsAdapter HierarchyBoundsListener

2. java.awt.dnd

Adapterklasse Listener-Schnittstelle
DragSourceAdapter DragSourceListener
DragTargetAdapter DragTargetListener

3. javax.swing.event

Adapterklasse Listener-Schnittstelle
MouseInputAdapter MouseInputListener
InternalFrameAdapter InternalFrameListener

Diese sind im Abstract Window Toolkit ihrer jeweiligen Java-Pakete vorhanden. Um die Natur der in Listener-Schnittstellen enthaltenen Methoden zu verstehen, betrachten wir einige Beispiele:

  1. Die WindowListener-Schnittstelle definiert Methoden, die sich auf Fensterereignisse beziehen, einschließlich des Öffnens und Schließens eines Fensters, der Aktivierung und Deaktivierung eines Fensters und der Ikonifizierung und Entgiftung eines Fensters.
  2. Die KeyListener-Schnittstelle definiert Methoden, die Tastenereignisse verarbeiten, die vom Benutzer ausgelöst werden, der mit Tastaturkomponenten interagiert.
  3. Die MouseListener-Schnittstelle wird benachrichtigt, wenn eine Maus stabil ist, und empfängt Ereignispotenziale in Bezug auf das Verlassen, Betreten, Klicken, Drücken oder Loslassen einer Komponente im visuellen Rahmen des Benutzers.
  4. Die Komponenten-Listener-Schnittstelle empfängt Komponentenereignispotentiale. Hier bezieht sich eine Komponente auf ein beliebiges grafisches Objekt, das für die Interaktion mit dem Benutzer entwickelt wurde, wie z. B. Schaltflächen, Kontrollkästchen und Bildlaufleisten.

Unterschied zwischen Klassenadapter und Objektadapter

Um Funktionalität und Flexibilität zu gewährleisten, bietet objektorientierte Programmierung wie JAVA Programmierern Features wie Vererbung und Komposition. Wenn Sie versuchen, einen bestimmten Code wiederzuverwenden, indem Sie seine Eigenschaften von einer anderen Klasse erben, bleibt die von Ihnen erstellte Unterklasse während der gesamten Länge des Programms von der übergeordneten Klasse abhängig.

Dies macht das System in vielen Fällen immer komplexer und weniger testbar und erschwert den Austausch von Funktionalität zur Laufzeit mühsam. Bei der Komposition verwendet eine Klasse nur eine andere. Die Entkopplung zwischen beiden wird durch eine klare Definition der Schnittstellen weiter gefördert.

Die Debatte zwischen Klassenadapter und Objektadapter kann daher wie folgt gelöst werden. Der Klassenadapter verwendet Vererbung und kann daher nur eine Klasse umschließen. Es kann keine Schnittstelle umschließen, da es per Definition von einer Basisklasse abgeleitet werden muss. Ein Objektadapter verwendet Komposition und ist daher in der Lage, sowohl Klassen als auch Schnittstellen zu umhüllen. Dies wird hauptsächlich dadurch erreicht, dass jede Klasse oder Schnittstelle in der Zusammensetzung ein privates, gekapseltes Mitglied ist.

Vorteile einer Adapterklasse

  1. Eine Adapterklasse unterstützt nicht verwandte Klassen bei der Zusammenarbeit.
  2. Durch die Verwendung einer Adapterklasse kann dieselbe Klasse auf mehrere Arten verwendet werden.
  3. Benutzer erhalten die Option eines Pluggable Kits für die Entwicklung von Anwendungen. Die Klassenverwendung wird daher in hohem Maße wiederverwendbar.
  4. Es erhöht die Transparenz des Unterrichts.
  5. Es bietet eine Möglichkeit, verwandte Muster in eine Klasse aufzunehmen.

Lernen Sie Software-Engineering-Kurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Fazit

Mit diesem Artikel haben wir die Mechanik einer Adapterklasse in JAVA, die drei Hauptpakete, die Adapterklassen enthalten, und die Vorteile von Adapterklassen für Programmierer verstanden. Adapterklassen sind abstrakte Klassen zum Empfangen verschiedener Ereignisse und dienen zum bequemen Erstellen von Listener-Objekten. Mit ihren unterschiedlichen Funktionalitäten bieten Adapterklassen Programmierern die Plattform, um über die Swing-Methodik innovativ zu sein.

Wenn Sie Ihre Java-Kenntnisse verbessern möchten, müssen Sie diese Java-Projekte in die Hände bekommen. Wenn Sie mehr über Java und Full-Stack-Entwicklung erfahren möchten, schauen Sie sich das Executive PG-Programm in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenges Training bietet, 9+ Projekte und Aufgaben, IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Was ist eine Adapterklasse in Java?

Die Adapterklasse ist eine Klasse, die mithilfe des Adaptermusters definiert wird. Ein Adapter kann verwendet werden, um einer vorhandenen Klasse neue Fähigkeiten hinzuzufügen, ohne die ursprüngliche Klasse zu ändern. Beispielsweise stammt die Klasse java.util.Scanner aus dem java.util-Paket. Die Scanner-Klasse kann nicht aus einer Datei lesen, da eine Datei kein InputStream ist. Um aus einer Datei zu lesen, erstellen wir eine Adapterklasse, die einen InputStream als Argument akzeptiert und die verarbeiteten Daten als Objekt zurückgibt. Adaptermuster werden verwendet, um die Funktionalität einer vorhandenen Klasse zu erweitern, ohne ihren Code in irgendeiner Weise zu ändern.

Was sind Entwurfsmuster in Java?

Ein Entwurfsmuster ist eine allgemeine wiederverwendbare Lösung für ein häufig auftretendes Problem in einem bestimmten Kontext im Softwaredesign. Es ist kein fertiges Design, das direkt in Code umgewandelt werden kann. Es ist eine Beschreibung oder Vorlage zur Lösung eines Problems, die in vielen verschiedenen Situationen verwendet werden kann. In der objektorientierten Programmierung sind Entwurfsmuster etablierte Konventionen, die den Entwurf und die Implementierung von Softwaresystemen erleichtern. Es gibt mehrere Entwurfsmuster in Java. Es ist nicht erforderlich, dass ein Entwurfsmuster aus einer anderen Sprache übernommen werden muss. Entwurfsmuster können in einer sehr einfachen und kurzen Form geschrieben werden.

Welches ist das am häufigsten verwendete Designmuster in Java?

In Java finden Sie viele Designmuster. Das am häufigsten verwendete Designmuster ist das Fabrikmuster. Es hat viele Anwendungen in der Unternehmensentwicklung. Es hilft beim Entfernen der Abhängigkeit von konkreten Klassen in der Anwendung. Lassen Sie uns Ihnen ein Beispiel aus dem wirklichen Leben geben. In einer E-Commerce-Anwendung müssen Sie möglicherweise ein Objekt eines Benutzers sowohl in der Test- als auch in der Produktionsumgebung erstellen. Die Benutzerklasse kann viele Unterklassen wie Admin, Ladenbesitzer, Verkäufer, Benutzer usw. haben. Die allgemeine Hauptmethode im Factory-Muster sieht folgendermaßen aus: public class UserFactory { public static Object create () { User user = createAdmin (); // prüfen, ob der Administrator berechtigt ist, den Benutzer zurückzugeben; // aktuellen Benutzer zurückgeben } }. Sehen Sie hier, wie die Benutzerklasse nicht von einer konkreten Klasse abhängig ist. Obwohl es kein vollständiges Beispiel ist, zeigt es Ihnen, wie das Factory-Muster funktioniert.