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(); }
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 } }
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() {} }
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() {} }
Teknik mengenal pasti pelanggaran ISP
Selepas prinsip pengasingan Antara Muka:
public interface IPrint { public void print(); public void getPrintSpoolDetails(); }
public interface IScan { public void scan(); public void scanPhoto(); }
public interface IFax { public void fax(); public void internetFax(); }
/** * * 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 } }
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 } }
public class CanonPrinter implements IPrint { @Override public void print() { // real printing code } @Override public void getPrintSpoolDetails() { // real get print spool details code } }
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!