Abhängigkeitsinversionsprinzip in JAVA
Eines der grundlegendsten Prinzipien des amerikanischen Rechts lautet: „Jeder ist gleich.“ Es ist uns egal, durch welche Art von Kampf oder Blutvergießen es erreicht wurde. Wir verstehen es nur als eine JAVA-Methode, die wie folgt definiert ist:
public final boolean Jeder ist gleich (Person 1, Person 2){
return true;
}
Obwohl die Gesetze jedes Staates unterschiedlich sein können, wie zum Beispiel das Grundgesetz der Vereinigten Staaten, kann New York als New Yorker Grundgesetz bezeichnet werden. Sie sollten eine solche Beziehung haben: Das New Yorker Grundgesetz erbt das Grundgesetz der Vereinigten Staaten Gibt an, erlaubt jedoch kein Umschreiben dieser Methode.
Wenn es um die Durchsetzung in New York geht, werden Folgendes verwendet:
Grundgesetz der Vereinigten Staaten = neues New Yorker Grundgesetz
Wenn Sie die Methode „Jeder ist gleich“ irgendwo aufrufen, wird „wahr“ zurückgegeben, was bedeutet, dass das Prinzip der Gleichheit aller nicht geändert werden kann. Dies ist eine Makroentscheidung, die das Mikro bestimmt, und sie wird sich aufgrund von Neu nicht zwischen Männern und Frauen ändern York. Ungleichheit der Frauen.
Beispielsweise gibt es in einem bestimmten Land auch ein Grundgesetz und eine Methode zur Gleichheit aller. Die Definition sollte wie folgt lauten:
öffentlicher boolescher Wert, jeder ist gleich (Person 1, Person 2){
return true;
}
Beispielsweise hat ein bestimmter Ort in einem bestimmten Land auch ein Grundgesetz. Das Grundgesetz eines bestimmten Ortes wird jedoch auch vom Grundgesetz eines bestimmten Landes geerbt. Da die Methode „Alle sind gleich“ jedoch nicht endgültig ist. Es kann umgeschrieben werden, wenn es an einer bestimmten Stelle implementiert wird:
Grundgesetz eines bestimmten Landes = neues Grundgesetz eines bestimmten Ortes
oder
Grundgesetz eines bestimmten Ortes = neues Grundgesetz eines bestimmten Ortes
Als das Grundgesetz eines bestimmten Landes das Grundgesetz eines bestimmten Landes übernahm, wurde die Methode „Jeder ist gleich“ möglicherweise umgeschrieben und geändert in:
öffentlicher boolescher Wert, jeder ist gleich (Person 1, Person 2){
if(person 1==Person von einem bestimmten Ort&& person 2==Person von einem bestimmten Ort){
if(Person 1 und Person 2 haben die gleichen Attribute){
if(Person 1 und Person 2 sind gleich, außer dass sie nicht dieselbe Person sind){
if(es passiert sonst niemandem){
return true;
}anders{
return false;
}
}anders{
return false;
}
}anders{
return false;
}
}anders{
return false;
}
}
Lassen Sie uns über das Abhängigkeitsinversionsprinzip gemäß „JAVA and Patterns“ sprechen:
Die abstrakte Ebene enthält die Geschäftslogik des Anwendungssystems und strategische Entscheidungen auf Makroebene, die für das gesamte System wichtig sind und die Unvermeidlichkeit widerspiegeln, während die konkrete Ebene einige kleinere umsetzungsbezogene Algorithmen und Logik sowie taktische Entscheidungen enthält Die Entscheidung birgt erhebliche Chancen. Bestimmte Codeebenen ändern sich häufig und Fehler können nicht vermieden werden. Die Abstraktionsebene hängt von der Ebene der Konkretheit ab. Algorithmusänderungen unter Verwendung von Details auf der spezifischen Ebene wirken sich unmittelbar auf die makroskopische Geschäftslogik auf der Abstraktionsebene aus, was dazu führt, dass das Mikroskop das Makroskopische bestimmt, die Taktik die Strategie bestimmt und die Chance die Notwendigkeit bestimmt. Das ist lächerlich.
Nachdem Sie dies gelesen haben, werden Sie verstehen, warum Sie es in Zukunft beim Schreiben von Code häufiger verwenden sollten:
abstrakte Logik = neue konkrete Logik
So wenig wie möglich verwenden:
spezifische Logik = neue spezifische Logik
Dies ist die derzeit befürwortete schnittstellenorientierte Programmierung. Hier ist ein weiteres praktisches Beispiel für schnittstellenorientierte Programmierung:
Normalerweise sollten Sie List häufiger verwenden. List selbst ist eine von Collection geerbte Schnittstelle. Sie können sie wie folgt verwenden:
Liste list=new Vector();
Die auf diese Weise deklarierte Liste ist tatsächlich ein Vektortyp, da Vektor ihre Unterklasse ist. Nach dem Liskov-Substitutionsprinzip können Unterklassen überall dort akzeptiert werden, wo die übergeordnete Klasse akzeptiert werden kann. Zu diesem Zeitpunkt ist die Liste synchronisiert und wird natürlich von bestimmten Leistungen beeinflusst. Wenn Sie in Zukunft zu einer Umgebung wechseln, die keine Synchronisierung erfordert, müssen Sie nur den obigen Code in etwa so ändern:
Liste list=new ArrayList();
Es muss kein anderer Code geändert werden. Der tatsächliche Listentyp ist derzeit ArrayList.
An diesem Punkt können wir erkennen, warum die schnittstellenorientierte Programmierung von Designern geschätzt wird, denn nachdem sie die Schnittstelle bereitgestellt haben, implementieren die Implementierer bestimmte Klassen basierend auf der Schnittstelle und es besteht kein Grund zur Sorge, dass die Implementierer die Integrität des Originals zerstören Programm, und die Designer werden sich nie nur um die Methoden in der Schnittstelle kümmern, nicht um die Hilfsmethoden in der konkreten Klasse. Dies ist jedoch mit zusätzlichen Kosten verbunden, z. B. durch das Hinzufügen von JAVA-Klassen. Wenn abstrakte Klassen weniger Effizienz bringen können, ist es eine bessere Wahl, konkrete Kopplungen wie Werkzeugklassen zu verwenden.