[JAVA] Schnittstellenvorteile

Einführung

Die Schnittstelle hat den Vorteil, dass sie das Design der Klasse unterstützt, z. B. die gemeinsamen Operationen zwischen den Klassen zusammen definieren lässt oder eine leere Schnittstelle definiert, um der Implementierungsklasse einige Merkmale zu verleihen und die Verarbeitungsabsicht zu verdeutlichen. Es gibt verschiedene.

Unter diesen Menschen mögen viele Menschen der Meinung sein, dass die folgenden Punkte die größten Vorteile der Schnittstelle sind.

Da ich diese Bedeutungen jedoch nicht aussortieren konnte, beschloss ich, sie in meinen eigenen Worten zu sortieren.

Wenn Sie die Schnittstelle nicht verwenden ...

Angenommen, Sie definieren drei Methoden in Klasse A wie folgt:

python


class A {
    //Methode zum Aufrufen
    void call() {
        System.out.println("Hit / Wear / Jankenpon");
    }
    //Jacques-Methode
    void jakajaka() {
        System.out.println(
            "Jakajakajan, Jakajakajan, Jakajakajakajaka, Jankenpawn!"
        );
    }
    //Tanzmethode
    void odoru() {
        System.out.println("Der Vorfall ereignet sich im Konferenzraum.");
        System.out.println("Nein, es ist die Seite.");
        System.out.println("Es ist ein Konferenzraum.");
        System.out.println("Site, Site.");
        System.out.println("Besprechungsraum, Besprechungsraum, Besprechungsraum.");
        System.out.println("Site, Site, Site, Site,...Feldraum! !! !!");
    }
}

Angenommen, Sie haben den folgenden Code definiert, um diese Klasse zu nutzen:

python


A a = new A();
a.call();
a.jakajaka();
a.odoru();

Dabei wird natürlich die von jeder Methode definierte Nachricht gedruckt.

Hier wird angenommen, dass eine neue B-Klasse mit einer modifizierten Implementierung der A-Klasse wie folgt neu eingerichtet wird und der Benutzer ** aufgerufen wird, in Zukunft die B-Klasse anstelle der A-Klasse zu verwenden **.

Implementierungsänderungen


class B {
    //Aufrufmethode entfernen
    //Der Methodenname wurde von jakajaka in sing geändert
    void sing() {
        ... //Das gleiche wie oben
    }
    //Der Methodenname wurde von Odoru in Genbashitsu geändert
    void genbashitsu() {
        ... //Das gleiche wie oben
    }
}

Da der Benutzer die Verwendung der A-Klasse beenden und die B-Klasse verwenden muss, ist es erforderlich, die Implementierung der B-Klasse zu verstehen und den Code wie folgt zu ändern.

python


B b = new B();
b.sing();
b.genbashitsu();

Obwohl die gleiche Nachricht wie zuvor von der sing-Methode und der genbashitsu-Methode ausgegeben wird, hat der Benutzer, der Probleme hat, weil die Aufrufmethode nicht verwendet werden kann **, einige A-Klassenfunktionen verwendet, die dem Aufruf entgegengesetzt sind **. Ich werde.

Beispiel für Verstöße


A a = new A(); //Verletzung des Anrufs
a.call();      //Verletzung des Anrufs
B b = new B();
b.sing();
b.genbashitsu();

Es mag ein gutes Ad-hoc-Verfahren sein, aber wenn die A-Klasse veraltet ist, kann jeder Teil davon, der auf die A-Klasse zugreift, zu einem Kompilierungsfehler führen. In diesem Fall müssen Sie diesen Teil in Zukunft reparieren.

Ohne die Schnittstelle auf diese Weise muss der Benutzer bei Änderungen der Implementierung die Änderungen in der neuen Implementierung kennen und den Code ändern, um dieselbe Implementierung wie zuvor beizubehalten. Sie müssen darüber nachdenken, was Sie tun müssen. Wenn Sie eine alte Funktion verwenden, die Sie nicht verwenden sollten, müssen Sie Zeit damit verbringen, sie zu reparieren, wenn diese Funktion in Zukunft eingestellt wird.

Mit der Schnittstelle ...

Über die Benutzeroberfläche können Sie dem Benutzer mitteilen, welche Methoden verfügbar sind. Solange der Benutzer die in der Schnittstelle definierten Funktionen und die Funktionen der zu verwendenden Implementierungsklasse kennt, ist es nicht erforderlich, die verfügbaren und nicht verfügbaren Methoden zu überprüfen, selbst wenn die Implementierung geändert wird.

python


interface Contract {
  void call();
  void sing();
  void genbashitsu();
}

python


class B implements Contract {
    //Methode zum Aufrufen
    @Override public void call() {}; //Leere Implementierung
    //Jacques-Methode
    @Override public void sing() {
        ... //Das gleiche wie oben
    }
    //Tanzmethode
    @Override public void genbashitsu() {
        ... //Das gleiche wie oben
    }
}

Wenn die Klasse, die die Schnittstelle implementiert, eine leere Methode hat, kann der Benutzer diese Methode bei Bedarf mithilfe einer anonymen Klasse implementieren [^ leere Implementierung]. ].

Beispiel für die Verwendung der Schnittstelle


Contract c = new B() {
    @Override public void call() {
        System.out.println("Hit / Wear / Jankenpon");
    }
};
c.call();        //Hit / Wear / Jankenpon
c.sing();        //Jakajakajan, Jakajakajan, Jakajakajakajaka, Jankenpawn!
c.genbashitsu(); //Der Vorfall ist ... der Baustellenraum! !! !!

Zusammenfassung

Über die Benutzeroberfläche können Benutzer flexible Programme erstellen, ohne befürchten zu müssen, dass aufgrund von Implementierungsänderungen Änderungen erforderlich sind. Wenn eine neue Implementierungsklasse wie der folgende Code aussieht und Sie sie verwenden möchten, können Sie sie nur durch Ändern der generierten Instanz verwenden.

Neue Implementierungsklasse


class NewB implements Contract {
  //Methode zum Aufrufen
  @Override public void call() {}; //Leere Implementierung
  //Jacques-Methode
  @Override public void sing() {
    System.out.println("Oui Air");
  }
  //Tanzmethode
  @Override public void genbashitsu() {
    System.out.println("Lalala Love Sun Buddy Heute Abend Sticky Spring Spring Spring Spring Valeza Love Go");
  }
}

Umschalten der zu verwendenden Klasse


Contract c = new NewB() {
    @Override public void call() {
        System.out.println("Hit / Wear / Jankenpon");
    }
};
c.call();        //Hit / Wear / Jankenpon
c.sing();        //Oui Air
c.genbashitsu(); //Lalala Love Sun Buddy Heute Abend Sticky Spring Spring Spring Spring Valeza Love Go

[^ Benutzer]: Die Person, die die definierte Klasse verwendet. wie unten.

[^ Vertrag]: Die Anforderungen und Spezifikationen, die das Programm erfüllen muss.

[^ me]: Ich bin ehrlich gesagt nicht zuversichtlich, weil ich nur ein Hobbyist ohne praktische Erfahrung bin. Wenn Sie Fehler in der Interpretation finden, würden wir uns freuen, wenn Sie darauf hinweisen oder Vorschläge machen könnten.

[^ Leere Implementierung]: Wenn Sie eine anonyme Klasse verwenden, können Sie jede Methode überschreiben, auf die zugegriffen werden kann, auch wenn es sich nicht um eine leere Implementierung handelt.

Recommended Posts

Schnittstellenvorteile
Schnittstelle
Java (Schnittstelle)
neue Schnittstelle
[Java] -Schnittstelle
Über die Java-Schnittstelle
[Android] Beispiel für eine Schnittstelle
Einführung der Funktionsschnittstelle
Beispiel für die Verwendung der Schnittstelle
Schnittstelle und Zusammenfassung
[Java] -Schnittstelle
[Java] Funktionsschnittstelle
Über Schnittstelle, Java-Schnittstelle
Vererbung und Schnittstelle.