Kurzgeschichte: Ein Postbote wird gebeten, nach Hause zu gehen und die Umschläge (Briefe, Dokumente, Schecks, Geschenkkarten, Antrag, Liebesbrief) mit der darauf angegebenen Adresse zu erhalten.
Angenommen, es gibt keine Deckung und bitten Sie den Postboten, nach Hause zu gehen und alle Dinge zu erhalten und an andere Personen zu liefern, kann der Postbote verwirrt werden.
Also besser mit Deckung einwickeln (in unserer Geschichte ist es die Schnittstelle), dann wird er seine Arbeit gut machen.
Jetzt ist es die Aufgabe des Postboten, nur die Umschläge zu erhalten und zu liefern (er würde sich nicht darum kümmern, was sich im Umschlag befindet).
Erstellen Sie eine Art von interface
nicht tatsächlichen Typ, implementieren Sie ihn jedoch mit dem tatsächlichen Typ.
Zur Schnittstelle zu erstellen bedeutet, dass Ihre Komponenten erhalten problemlos in den Rest des Codes passen
Ich gebe Ihnen ein Beispiel.
Sie haben die AirPlane-Oberfläche wie folgt.
interface Airplane{
parkPlane();
servicePlane();
}
Angenommen, Sie haben Methoden in Ihrer Controller-Klasse von Ebenen wie
parkPlane(Airplane plane)
und
servicePlane(Airplane plane)
in Ihrem Programm implementiert. Ihr Code wird nicht unterbrochen . Ich meine, es muss sich nicht ändern, solange es Argumente akzeptiert wieAirPlane
.
Denn es wird jedes Flugzeug trotz tatsächlichen Typ akzeptieren, flyer
, highflyr
,fighter
etc.
Auch in einer Sammlung:
List<Airplane> plane;
// Nimm alle deine Flugzeuge.
Das folgende Beispiel verdeutlicht Ihr Verständnis.
Sie haben ein Kampfflugzeug, das es implementiert
public class Fighter implements Airplane {
public void parkPlane(){
// Specific implementations for fighter plane to park
}
public void servicePlane(){
// Specific implementatoins for fighter plane to service.
}
}
Das Gleiche gilt für HighFlyer und andere Klassen:
public class HighFlyer implements Airplane {
public void parkPlane(){
// Specific implementations for HighFlyer plane to park
}
public void servicePlane(){
// specific implementatoins for HighFlyer plane to service.
}
}
Denken Sie nun, Ihre Controller-Klassen verwenden AirPlane
mehrmals:
Angenommen, Ihre Controller-Klasse ist ControlPlane wie unten.
public Class ControlPlane{
AirPlane plane;
// so much method with AirPlane reference are used here...
}
Hier kommt Magie, da Sie Ihre neuen AirPlane
Typinstanzen so viele machen können, wie Sie möchten, und Sie den ControlPlane
Klassencode nicht ändern .
Sie können eine Instanz hinzufügen ...
JumboJetPlane // implementing AirPlane interface.
AirBus // implementing AirPlane interface.
Sie können auch Instanzen zuvor erstellter Typen entfernen.