Rumah > Java > javaTutorial > Prinsip Pengasingan Antara Muka

Prinsip Pengasingan Antara Muka

王林
Lepaskan: 2024-08-25 22:30:33
asal
986 orang telah melayarinya

Interface Segregation Principle

Tiada pelanggan harus dipaksa untuk bergantung pada kaedah yang tidak digunakannya

Pertimbangkan contoh ruang pejabat di mana pelbagai peranti output diwakili menggunakan objek

Sebelum Prinsip Pengasingan Antara Muka:

Antara Muka IMultiFunction

/**
 * @ImultiFunction interface has methods related to all output devices present in office space
 * for devices like Printer, Scanner, Fax machines, etc
*/
public interface IMultiFunction {
    public void print();
    public void getPrintSpoolDetails();
    public void scan();
    public void scanPhoto();
    public void fax();
    public void internetFax();
}
Salin selepas log masuk

Kini melaksanakan antara muka biasa di atas untuk pelbagai peranti

Kelas XeroxWorkCenter mempunyai semua keupayaan

/**
 * 
 * You must have seen Xerox work station device which has all the features in one like printing, scanning, xerox,
 * fax etc
*/
public class XeroxWorkCenter implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }

    @Override
    public void fax() {
        // real fax code
    }

    @Override
    public void internetFax() {
        // real internet fax code
    }

}
Salin selepas log masuk

Kelas HpPrinterNScanner mempunyai keupayaan mencetak dan mengimbas

public class HpPrinterNScanner implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }

    //Since HpPrinterNScanner has only printing and scanning abilities fax() and internetFax() will have empty body
    @Override
    public void fax() {}

    @Override
    public void internetFax() {}

}
Salin selepas log masuk

Kelas CanonPrinter hanya mempunyai keupayaan mencetak

public class CanonPrinter implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    //Since the CanonPrinter has only printing ability rest of the method will have an empty body
    @Override
    public void scan() {}

    @Override
    public void scanPhoto() {}

    @Override
    public void fax() {}

    @Override
    public void internetFax() {}

}
Salin selepas log masuk

Teknik mengenal pasti pelanggaran ISP

  • Antara muka lemak (Antara muka mempunyai dua banyak pengisytiharan kaedah)
  • Antara muka dengan kohesi rendah (antara muka yang mempunyai kaedah yang tidak mungkin berkaitan antara satu sama lain)
  • *Pelaksanaan kaedah kosong *( apabila kelas dipaksa untuk melaksanakan kaedah yang mereka tidak gunakan, mereka meninggalkan pelaksanaan kaedah dengan badan kosong)

Selepas prinsip pengasingan Antara Muka:

public interface IPrint {
    public void print();
    public void getPrintSpoolDetails();
}
Salin selepas log masuk
public interface IScan {
    public void scan();
    public void scanPhoto();
}
Salin selepas log masuk
public interface IFax {
    public void fax();
    public void internetFax();
}
Salin selepas log masuk
/**
 * 
 * You must have seen the Xerox workstation device which has all the features in one like printing, scanning, xerox, fax, etc.
*/
public class XeroxWorkCenter implements IPrint,IScan,IFax {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code ̰
    }

    @Override
    public void fax() {
        // real fax code
    }

    @Override
    public void internetFax() {
        // real internet fax code
    }

}
Salin selepas log masuk
public class HpPrinterNScanner implements IPrint,IScan {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }
}
Salin selepas log masuk
public class CanonPrinter implements IPrint {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    } 
}
Salin selepas log masuk

Setiap Antara Muka mempunyai satu tanggungjawab dan jauh lebih bersih sekarang.

Hubungan yang dipegang oleh ISP dengan prinsip SOLID lain

Tanggungjawab tunggal
Selepas pengasingan antara muka kepada antara muka yang berbeza, kini semua antara muka seperti IPrint, IScan mempunyai satu tanggungjawab

Penggantian Liskov
Oleh kerana pengasingan kini semua kelas (melaksanakan antara muka) mengikuti penggantian Liskov, kerana semua subtipe atau kelas pelaksana boleh digantikan dengan pembolehubah rujukan antara muka mereka

Atas ialah kandungan terperinci Prinsip Pengasingan Antara Muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan