Definisi: Klien tidak boleh bergantung pada antarmuka yang tidak diperlukan; Ketergantungan satu kelas pada yang lain harus ditetapkan pada antarmuka terkecil.
Masalahnya berasal: Kelas A tergantung pada Kelas B melalui Antarmuka I, dan Kelas C tergantung pada Kelas D melalui Antarmuka I. Jika antarmuka I bukan antarmuka terkecil untuk Kelas A dan Kelas B, maka Kelas B dan Kelas D harus menerapkan metode yang tidak mereka butuhkan.
Solusi: Pisahkan antarmuka I yang membengkak menjadi beberapa antarmuka independen, dan kelas A dan kelas C menetapkan dependensi dengan antarmuka yang mereka butuhkan masing -masing. Artinya, prinsip isolasi antarmuka diadopsi.
Mari kita berikan contoh untuk menggambarkan prinsip isolasi antarmuka:
Arti dari angka ini adalah: Kelas A tergantung pada Metode 1, Metode 2, Metode 3 dalam Antarmuka I, dan Kelas B adalah implementasi ketergantungan pada Kelas A. Kelas C tergantung pada metode 1, Metode 4, Metode 5 dalam Antarmuka I, dan Kelas D adalah implementasi yang harus dilaksanakan oleh Kelas C.
Pertama -tama mari kita lihat contoh melanggar isolasi antarmuka:
antarmuka publik iWorker {public void work (); public void eat (); } public class Worker implements IWorker{ @Override public void work() { // TODO worker work} @Override public void eat() { // TODO worker eat} } public class Robot implements IWorker { @Override public void work() { // TODO robot work} @Override public void eat() { // TODO robot eat? }}
Karena robot tidak perlu makan, Iworker dianggap sebagai antarmuka yang membengkak. Tentu saja, Anda juga dapat implementasi jangka pendek dari metode makan di kelas robot, tetapi ini dapat menyebabkan bug yang tidak terduga. Misalnya, jika metode makan perlu mengkonsumsi jumlah kotak makan siang, akan ada fenomena yang salah.
Berikut ini adalah implementasi yang dimodifikasi:
antarmuka publik iWorker {public void work (); } antarmuka publik idiet {public void eat (); } Pekerja kelas publik mengimplementasikan iWorker, idiet {@Override public void work () {// TODO BEKERJA} @Override public void eat () {// TODO WORK}} robot kelas publik mengimplementasikan iWorker {@Override public void work () {// TODO robot}} {@Override public void () {// TODO robot}}
Meringkaskan:
1. Antarmuka harus sekecil mungkin dan sangat kohesif, tetapi harus sesuai dan terlalu rinci dan sulit dipelihara.
2. Jika telah dirancang sebagai antarmuka yang membengkak, itu dapat diisolasi menggunakan mode adaptor.