Heim Java javaLernprogramm Was ist das Adaptermuster (Adapter) in Java? Adaptermuster (ausführliche Erklärung)

Was ist das Adaptermuster (Adapter) in Java? Adaptermuster (ausführliche Erklärung)

Oct 18, 2018 pm 04:14 PM
java 适配器模式

In diesem Artikel erfahren Sie, was das Adaptermuster (Adapter) in Java ist. Adaptermuster (ausführliche Erklärung). Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Zweck: Anpassen des Quelltyps an den Zieltyp, um den Anforderungen des Clients (Client) gerecht zu werden; hier betrachten wir den Aufrufer der Zielschnittstelle als Client

Verwendungsszenarien: In Szenarien, in denen der Typ vom Quelltyp in den Zieltyp konvertiert werden muss

Vorbedingungen : Bestehender Kunde

//Client 一个调用目标接口的方法
Class ClientInvoking {

    static void invoke(TargetInterface target) {
        String value = target.getMark();
        System.out.println(value);
    }

}
Nach dem Login kopieren

Mehrere häufig verwendete Modi

Modus 1: Es gibt eine Zielschnittstelle und eine vorhandene Methode

//目标接口
public interface TargetInterface {
    
    public String getMark();

    public String getInfo();

}
Nach dem Login kopieren
//已有类及方法
public class ExistClass {

    public String sayHello() {
        return "Hello";
    }
      
    public String sayWorld() {
        return "World";
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

Wir gehen davon aus, dass die von ExistClass zurückgegebene Zeichenfolge genau das ist, was unser Client benötigt, aber der Client benötigt Es wird über ein Objekt vom Typ TargetInterface abgerufen. Daher müssen wir einen Weg finden, die vorhandene Klasse so anzupassen, dass sie den Anforderungen des Kunden gerecht wird. In diesem Modus gibt es zwei Anwendungslösungen:

Lösung 1. Klassenadaptermuster

//适配器
public class ClassAdapter extends ExistClass implements TargetInterface {
    
    public int getMark() {
        String value = this.sayHello();
        return value;
    }
    
    public int getInfo() {
        String value = this.sayWorld();
        return value;
    }
    
}
Nach dem Login kopieren
//客户端调用
TargetInterface target = new ClassAdapter();
ClientInvoking.invoke(target);
Nach dem Login kopieren

Aus dem Konzept der Java-Schnittstelle ist ersichtlich, dass ClassAdapter als Implementierungsklasse von TargetInterface nach oben in den TargetInterface-Typ umgewandelt werden kann, um sich an die Bedürfnisse des Clients anzupassen.

Option 2. Objektadaptermuster

//适配器
public class ClassAdapter implements TargetInterface {
    
    private ExistClass exist;
    
    public ClassAdapter(ExistClass existClass) {
        this.exist = existClass;
    }
    
    public int getMark() {
        String value = exist.sayHello();
        return value;
    }
    
    public int getInfo() {
        String value = exist.sayWorld();
        return value;
    }
    
}
Nach dem Login kopieren
rrree

Diese Option ähnelt dem Klassenadaptermuster, außer dass sie keine Vererbung, sondern verwendet die Methode zum Halten von Objekten, flexibler und skalierbarer.

Modus 2: Es gibt keine Zielschnittstelle, aber eine Zielklasse und vorhandene Methoden

Überprüfen wir zunächst die Voraussetzungen Der Client wird wie folgt geändert:

//客户端调用
TargetInterface target = new ClassAdapter(new ExistClass());
ClientInvoking.invoke(target);
Nach dem Login kopieren

Nach der Änderung erfordert die Aufrufmethode ein Objekt der TargetClass-Klasse als Parameter; im Folgenden sind die Zielklasse und vorhandene Klassen aufgeführt

Class ClientInvoking {

    static void invoke(TargetClass target) {
        String value = target.getMark();
        System.out.println(value);
    }

}
Nach dem Login kopieren
//目标类
public class Class {
    
    public String getMark() {
        return "yes";
    }

    public String getInfo() {
        return "no";
    }

}
Nach dem Login kopieren

Wir gehen davon aus, dass die von ExistClass zurückgegebene Zeichenfolge genau das ist, was unser Client verwenden muss, und der Inhalt des vom Client benötigten TargetClass-Objekts veraltet ist, sodass wir ExistClass entsprechend anpassen müssen Client.

//已有类及方法
public class ExistClass {

    public String sayHello() {
        return "Hello";
    }
      
    public String sayWorld() {
        return "World";
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
rrree

In diesem Modus sind zwei Klassen erforderlich, und gemäß dem Einzelvererbungsmechanismus von Java können wir nur das Objekt halten durch Form, das Objektadaptermuster.

Modus 3: Standardadaptermodus

In diesem Modus gibt es keinen expliziten Zieltyp, sondern nur den Quelltyp Um dies zu verwenden, liegt dies häufig daran, dass der Quelltyp zu viele Dinge bereitstellt, die wir nicht benötigen, und wir ihn über den Adaptermodus anpassen müssen. Nehmen Sie WindowListener als Beispiel, um es zu erklären:

//适配器
public class ClassAdapter extends TargetClass {
    
    private ExistClass exist;
    
    public ClassAdapter(ExistClass existClass) {
        this.exist = existClass;
    }
    
    public int getMark() {
        String value = exist.sayHello();
        return value;
    }
    
    public int getInfo() {
        String value = exist.sayWorld();
        return value;
    }
    
}
Nach dem Login kopieren
//客户端调用
TargetClass target = new ClassAdapter(new ExistClass());
ClientInvoking.invoke(target);
Nach dem Login kopieren

Code wie dieser scheint sehr umständlich zu sein; ich muss zum Beispiel nur das Abschlussereignis abhören, aber es wird viel Vorlagencode generiert hat damit nichts zu tun. Aus diesem Grund werden wir ihn anpassen und nur eine abstrakte Klasse anhören Implementieren Sie die Schnittstelle und stellen Sie allen Listenern eine leere Implementierung zur Verfügung. Verwenden Sie dann eine Unterklasse der abstrakten Klasse, um die Implementierung des Fensterschließers neu zu schreiben. Der Code lautet wie folgt:

//WindowListener源码
public interface WindowListener extends EventListener {
    public void windowOpened(WindowEvent e);
    public void windowClosing(WindowEvent e);
    public void windowClosed(WindowEvent e);
    ...
}
Nach dem Login kopieren
//添加监听器的例子
Frame frame = new Frame();
frame.addWindowListener(new WindowListener() {
    @Override    
    public void windowOpened(WindowEvent e) {
            
    }

    @Override    
    public void windowClosing(WindowEvent e) {

    }

    @Override    
    public void windowClosed(WindowEvent e) {

    }
    ...
})
Nach dem Login kopieren
rreee

Diese Methode vereinfacht die Schnittstelle und verbessert die Lesbarkeit des Codes. Das Wichtigste ist, dass wir die Anpassung der Benutzeroberfläche erkannt haben und nur die Dinge tun können, die uns wichtig sind.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird. Weitere verwandte Tutorials finden Sie unter Java-Video-Tutorial,

Java-Entwicklungsgrafik-Tutorial

, Bootstrap-Video-Tutorial!

Das obige ist der detaillierte Inhalt vonWas ist das Adaptermuster (Adapter) in Java? Adaptermuster (ausführliche Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Feb 07, 2025 pm 12:11 PM

Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo

See all articles