Heim >Java >javaLernprogramm >Wie versteht und verwendet man das Java-Adaptermuster?

Wie versteht und verwendet man das Java-Adaptermuster?

PHPz
PHPznach vorne
2023-04-23 09:19:141445Durchsuche

1. Was ist der Adaptermodus?

Tatsächlich sollte jeder mit den drei Worten „Adapter“ vertraut sein. Wir wissen, dass das iPhone von Apple keinen Ladestecker mehr enthält. Daher können wir dieses Datenkabel nicht alleine zum Anschließen an 220 V verwenden Da es auf der Platine aufgeladen wird, müssen wir einen Adapter kaufen, um die Platine mit dem Mobiltelefon zu verbinden.

Tatsächlich kann es beim Softwaredesign auch vorkommen, dass die zu entwickelnden Komponenten mit bestimmten Geschäftsfunktionen bereits in der vorhandenen Komponentenbibliothek vorhanden sind, diese jedoch nicht mit den Schnittstellenspezifikationen des aktuellen Systems kompatibel sind -entwickelt, werden die Kosten sehr hoch sein, dann kann die Verwendung des Adaptermodus diese Probleme gut lösen.

2. Definition des Adaptermusters

Adaptermuster: Konvertieren Sie die Schnittstelle einer Klasse in eine andere vom Kunden gewünschte Schnittstelle, sodass Klassen, die aufgrund inkompatibler Schnittstellen nicht zusammenarbeiten können, zusammenarbeiten können.

Das Adaptermuster ist in zwei Typen unterteilt: Klassenstrukturmuster und Objektstrukturmuster. Ersteres weist einen höheren Grad an Kopplung zwischen Klassen auf und erfordert, dass Programmierer die interne Struktur relevanter Komponenten in der vorhandenen Komponentenbibliothek verstehen. Daher ist die Anwendung relativ gering.

3. Vor- und Nachteile des Adaptermusters

Vorteile:

  • Der Client kann die Zielschnittstelle transparent über den Adapter aufrufen

  • Vorhandene Klassen wiederverwenden, Programmierer müssen den Originalcode nicht ändern und vorhandene wiederverwenden Klassen Die Adapterklasse

  • entkoppelt die Zielklasse und die Adapterklasse und löst so das Problem inkonsistenter Schnittstellen zwischen der Zielklasse und der Adapterklasse

  • Es entspricht dem Öffnungs- und Schließprinzip in vielen Geschäftsszenarien

Nachteile:

  • Der Adapter-Schreibprozess muss vollständig auf der Grundlage des Geschäftsszenarios berücksichtigt werden, was die Komplexität des Systems erhöhen kann.

  • Erhöht die Schwierigkeit des Code-Lesens und verringert die Code-Lesbarkeit Machen Sie den Systemcode chaotisch.

4. Die Struktur und Implementierung des Adaptermusters Die vom aktuellen Systemgeschäft erwartete Schnittstelle kann eine abstrakte Klasse oder eine Schnittstelle sein

Adaptee-Klasse: Es ist die Komponentenschnittstelle in der vorhandenen Komponentenbibliothek, auf die zugegriffen und die angepasst wird. Durch Vererbung oder Referenz angepasstes Objekt des Adapters, Konvertieren der Adapterschnittstelle in die Zielschnittstelle, sodass Kunden im Format der Zielschnittstelle auf den Adapter zugreifen können

  • Die Struktur des Klassenadaptermusters:

  • Die Struktur des Objektadaptermusters:

  • 5. Code-Implementierung des Adaptermodus

  • A Verwenden Sie eine Kombinationsmethode, um den Adapter zu implementieren:

Wir haben jetzt einen dreiphasigen Laptop-Stecker, den wir jetzt verwenden müssen Zum Aufladen benötigen wir einen zweiphasigen Stecker. Dieser Stecker ist mit einem zweiphasigen Adapter ausgestattet:

Wie versteht und verwendet man das Java-Adaptermuster?

Dreiphasige Steckdosenschnittstelle:

/**
 * 三相插座接口
 */
public interface ThreePlugIf {

    //使用三相电流供电
    public void powerWithThree();

}

Zweiphasige Steckdose nach nationalem Standard:Wie versteht und verwendet man das Java-Adaptermuster?

/**
 * 国标的二相插座
 */
public class GBTowPlug {
    public void powerWithTwo(){
        System.out.println("使用二相电流供电");
    }
}

Laptop:

/**
 * 笔记本
 */
public class NoteBook {

    private ThreePlugIf plug;

    public NoteBook(ThreePlugIf plug){
        this.plug = plug;
    }

    //使用插座充电
    public void charge(){
        plug.powerWithThree();
    }
}

Dreiphasen-zu-Zweiphasen-Steckdosenadapter:

/**
 * 三相转二相的插座适配器
 */

public class TwoPlugAdapter implements ThreePlugIf {


    private GBTowPlug plug;

    public TwoPlugAdapter(GBTowPlug plug) {
        this.plug = plug;
    }

    @Override
    public void powerWithThree() {
        System.out.println("通过转换");
        plug.powerWithTwo();
    }
}

Testklasse:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();
	}
}

Ausgabeergebnis:

Wie versteht und verwendet man das Java-Adaptermuster?

Zweiphasenstromversorgung durch Umwandlung verwenden

Der Adapter, der die Kombinationsmethode verwendet, wird als Objektadapter bezeichnet

Funktionen:

Kombinieren Sie den „Adapter“ als Objekt im Adapter. Ändern Sie in der Klasse die Zielschnittstelle und packen Sie sie in den Adapter.

B Verwenden Sie Vererbung, um den Adapter zu implementieren:

Erben Sie den Adapter :

/**
 * 采用继承方式的插座适配器
 */
public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{
    @Override
    public void powerWithThree() {
        System.out.println("借助继承适配器");
        this.powerWithTwo();
    }
}

Testklasse:
public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();

    //使用继承方法
    three = new TwoPlugAdapterExtends();
    nb = new NoteBook(three);
    nb.charge();
}
}

Ausgabe:

Durch Konvertierung

Zweiphasen-Stromversorgung verwenden

Mit Hilfe eines Vererbungsadapters

Zweiphasen-Stromversorgung verwenden

Wie versteht und verwendet man das Java-Adaptermuster?

Die Vererbungsmethode wird als Klasse bezeichnet Adapter

Eigenschaften:

Durch Mehrfachvererbung inkompatibler Schnittstellen wird die Übereinstimmung der Zielschnittstelle erreicht, und eine einzelne Klasse wird zur Implementierung der Anpassung verwendet

6 Anwendungsszenarien des Adaptermusters


Das zuvor entwickelte System verfügt über Klassen, die die funktionalen Anforderungen des neuen Systems erfüllen, aber seine Schnittstelle stimmt nicht mit der Schnittstelle des neuen Systems überein


Verwenden Sie von Dritten bereitgestellte Komponenten, aber die Definition der Komponentenschnittstelle unterscheidet sich von der Schnittstellendefinition von Ihnen benötigt

Das obige ist der detaillierte Inhalt vonWie versteht und verwendet man das Java-Adaptermuster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen