definisi:
Modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah, keduanya harus bergantung pada abstrasinya; Abstraksi tidak boleh bergantung pada detail; Detail harus bergantung pada abstraksi.
Asal usul masalah: Kelas A secara langsung tergantung pada Kelas B. Jika Anda ingin mengubah Kelas A untuk bergantung pada Kelas C, Anda harus mencapainya dengan memodifikasi Kode Kelas A. Dalam skenario ini, Kelas A umumnya merupakan modul tingkat tinggi yang bertanggung jawab atas logika bisnis yang kompleks; Kelas B dan Kelas C adalah modul tingkat rendah yang bertanggung jawab untuk operasi atom dasar; Jika Kelas A dimodifikasi, itu akan membawa risiko yang tidak perlu bagi program.
Solusi: Modifikasi Kelas A untuk bergantung pada Antarmuka I, dan Kelas B dan Kelas C Setiap antarmuka implementasi I. Kelas A secara tidak langsung menghubungi kelas B atau kelas C melalui antarmuka I, yang akan sangat mengurangi kemungkinan memodifikasi kelas A.
Prinsip inversi ketergantungan didasarkan pada fakta bahwa hal -hal abstrak jauh lebih stabil daripada variabilitas secara terperinci. Arsitektur yang dibangun di atas abstrak jauh lebih stabil daripada arsitektur yang dibangun di atas detail. Di Java, abstrak mengacu pada antarmuka atau kelas abstrak, dan detail adalah kelas implementasi spesifik. Tujuan menggunakan antarmuka atau kelas abstrak adalah untuk merumuskan spesifikasi dan kontrak tanpa melibatkan operasi spesifik apa pun, dan untuk menyerahkan tugas menyajikan rincian ke kelas implementasinya untuk penyelesaian.
Gagasan inti dari prinsip inversi ketergantungan adalah pemrograman yang berorientasi antarmuka. Kami masih akan menggunakan contoh untuk menggambarkan di mana pemrograman berorientasi antarmuka lebih baik daripada pemrograman berorientasi implementasi. Adegan seperti ini: sang ibu menceritakan sebuah kisah kepada anaknya. Selama dia memberinya buku, dia bisa menceritakan kisah kepada anaknya menurut buku itu.
contoh:
Inversi ketergantungan ilegal
siswa kelas publik {public void baca (buku buku) {System.out.println ("Siswa mulai membaca:"+book.getName ()); }} buku kelas publik {public string getName () {return "book"; }}
Ketika siswa perlu membaca halaman web, mereka perlu memodifikasi kelas siswa, yang merupakan desain yang sangat tidak ramah. Mari kita lihat contoh mematuhi prinsip inversi ketergantungan.
Public Interface Person {public void read (pembaca pembaca); } pembaca antarmuka publik {public string getName (); } siswa kelas publik mengimplementasikan orang {@Override public void read (pembaca pembaca) {System.out.println ("Student Start Reading:"+reader.getName ()); }} buku kelas publik mengimplementasikan pembaca {public string getName () {return "book"; }} situs web kelas publik mengimplementasikan pembaca {public string getName () {return "halaman web"; }} tes kelas publik {public static void main (string [] args) {orang siswa = siswa baru (); student.read (buku baru ()); Student.Read (situs web baru ()); }}
Dalam metode baca kami menggunakan antarmuka sebagai parameter.
Meringkaskan:
1. Yang terbaik adalah memiliki antarmuka atau kelas abstrak untuk setiap kelas, atau kedua antarmuka dan kelas abstrak.
2. Deklarasi variabel lebih disukai antarmuka atau kelas abstrak.
3. Tinggal dengan prinsip substitusi selama warisan.