definición:
Los módulos de alto nivel no deben depender de módulos de bajo nivel, ambos deben confiar en su abstracción; Las abstracciones no deben confiar en los detalles; Los detalles deben confiar en la abstracción.
El origen del problema: la clase A depende directamente de la Clase B. Si desea cambiar la Clase A para depender de la Clase C, debe lograrlo modificando el Código de Clase A. En este escenario, la Clase A es generalmente un módulo de alto nivel responsable de la lógica comercial compleja; La clase B y la clase C son módulos de bajo nivel responsables de las operaciones atómicas básicas; Si se modifica la clase A, traerá riesgos innecesarios al programa.
Solución: Modifique la Clase A para depender de la interfaz I, y la Clase B y la Clase C cada una interfaz de implementación I. La Clase A contacta indirectamente la Clase B o la Clase C a través de la Interfaz I, lo que reducirá en gran medida la posibilidad de modificar la clase A.
El principio de la inversión de dependencia se basa en el hecho de que las cosas abstractas son mucho más estables que la variabilidad en los detalles. La arquitectura basada en abstracto es mucho más estable que la arquitectura basada en los detalles. En Java, el resumen se refiere a una interfaz o clase abstracta, y los detalles son clases de implementación específicas. El propósito de usar la interfaz o clase abstracta es formular especificaciones y contratos sin involucrar ninguna operación específica, y entregar la tarea de presentar detalles a sus clases de implementación para su finalización.
La idea central del principio de inversión de dependencia es la programación orientada a la interfaz. Todavía usaremos un ejemplo para ilustrar dónde la programación orientada a la interfaz es mejor que la programación orientada a la implementación. La escena es así: la madre cuenta una historia a su hijo. Mientras le dé un libro, puede contar historias a su hijo según el libro.
ejemplo:
Inversión de dependencia ilegal
Public Class Student {public void Read (Libro Libro) {System.out.println ("El estudiante comienza a leer:"+book.getName ()); }} Libro de clase pública {public String getName () {return "book"; }}
Cuando los estudiantes necesitan leer páginas web, deben modificar la clase de estudiantes, que es un diseño muy hostil. Veamos el ejemplo de adherirse al principio de inversión de dependencia.
Interfaz pública Persona {Public void Read (Reader Reader); } lector de interfaz pública {public String getName (); } El estudiante de clase pública implementa a la persona {@Override public void Read (Reader Reader) {System.out.println ("Estudiante comienza a leer:"+lector.getName ()); }} El libro de clase pública implementa el lector {public String getName () {return "book"; }} El sitio web de clase pública implementa el lector {public String getName () {return "Página web"; }} prueba de clase pública {public static void main (string [] args) {persona student = new Student (); Student.read (nuevo libro ()); student.read (nuevo sitio web ()); }}
En el método de lectura usamos la interfaz como parámetro.
Resumir:
1. Es mejor tener interfaces o clases abstractas para cada clase, o ambas interfaces y clases abstractas.
2. La declaración variable es preferiblemente una interfaz o una clase abstracta.
3. CONSEGURAR EL PRINCIPIO DE SUSTITUCIÓN Durante la herencia.