Definition:
Auf hohen Modulen sollten sich nicht auf Module auf niedriger Ebene verlassen, beide sollten auf ihre Abstraktion beruhen. Abstraktionen sollten sich nicht auf Details verlassen; Details sollten auf Abstraktion beruhen.
Der Ursprung des Problems: Klasse A hängt direkt von Klasse B ab. Wenn Sie die Klasse A so ändern möchten, dass sie von Klasse C abhängig ist, müssen Sie dies erreichen, indem Sie den Code von Klasse A ändern. In diesem Szenario ist Klasse A im Allgemeinen ein hochstufiges Modul, das für komplexe Geschäftslogik verantwortlich ist. Klasse B und Klasse C sind Module mit niedrigem Niveau, die für grundlegende atomare Operationen verantwortlich sind. Wenn die Klasse A geändert wird, wird das Programm unnötige Risiken einbringen.
Lösung: Ändern Sie die Klasse A so, dass sie von der Schnittstelle I und der Klasse B und der Klasse C jeweils die Schnittstelle I abhängig sein. Die Klasse -A kontaktiert die Klasse B der Klasse B oder die Klasse C über Schnittstelle I, was die Wahrscheinlichkeit, die Klasse A. zu ändern, erheblich verringert.
Das Prinzip der Abhängigkeitsinversion basiert auf der Tatsache, dass abstrakte Dinge in Details viel stabiler als die Variabilität sind. Die Architektur, die auf Abstract basiert, ist viel stabiler als die Architektur, die auf Details basiert. In Java bezieht sich Abstract auf eine Schnittstelle oder eine abstrakte Klasse, und Details sind spezifische Implementierungsklassen. Der Zweck der Verwendung von Schnittstellen- oder abstrakter Klasse besteht darin, Spezifikationen und Verträge zu formulieren, ohne spezifische Operationen einzubeziehen, und die Aufgabe, ihren Implementierungsklassen Details für den Abschluss zu präsentieren, übergeben.
Die Kernidee des Prinzips der Abhängigkeitsinversion ist die interface-orientierte Programmierung. Wir werden weiterhin ein Beispiel verwenden, um zu veranschaulichen, wo die interface-orientierte Programmierung besser ist als implementierungsorientierte Programmierung. Die Szene ist so: Die Mutter erzählt ihrem Kind eine Geschichte. Solange sie ihr ein Buch gibt, kann sie ihrem Kind nach dem Buch Geschichten erzählen.
Beispiel:
Inversion der illegalen Abhängigkeit
public class student {public void read (Buchbuch) {System.out.println ("Student beginnt zu lesen:"+book.getName ()); }} public class Book {public String getName () {return "book"; }}
Wenn die Schüler Webseiten lesen müssen, müssen sie die Schülerklasse ändern, was ein sehr unfreundliches Design ist. Schauen wir uns das Beispiel der Einhaltung des Prinzips der Inversion der Abhängigkeit an.
public interface Person {public void read (Readerleser); } public interface reader {public String getName (); } public class Schüler implementiert Person {@Override public void read (Reader Reader) {System.out.println ("Student Start Lesen:"+reader.getName ()); }} public class Book implementiert Reader {public String getName () {return "book"; }} öffentliche Klasse -Website implementiert Reader {public String getName () {return "web Seite"; }} public class Test {public static void main (String [] args) {Person student = new Student (); Student.read (neues Buch ()); student.read (neue Website ()); }}
In der Lesemethode verwenden wir die Schnittstelle als Parameter.
Zusammenfassen:
1. Es ist am besten, Schnittstellen oder abstrakte Klassen für jede Klasse oder sowohl Schnittstellen als auch abstrakte Klassen zu haben.
2. Die variable Deklaration ist vorzugsweise eine Schnittstelle oder eine abstrakte Klasse.
3..