Kein Kunde sollte gezwungen werden, sich auf eine Methode zu verlassen, die er nicht verwendet
Stellen Sie sich ein Beispiel für einen Büroraum vor, in dem verschiedene Ausgabegeräte durch Objekte dargestellt werden
Vor dem Schnittstellentrennungsprinzip:
IMultifunktionsschnittstelle
/** * @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(); }
Implementieren Sie jetzt die oben genannte gemeinsame Schnittstelle für verschiedene Geräte
XeroxWorkCenter-Klasse mit allen Funktionen
/** * * 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 } }
HpPrinterNScanner-Klasse verfügt über Druck- und Scanfunktionen
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() {} }
CanonPrinter-Klasse verfügt nur über Druckfunktionen
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() {} }
Techniken zur Identifizierung von ISP-Verstößen
Prinzip der Schnittstellentrennung:
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 } }
Jede Schnittstelle hat eine einzige Verantwortung und ist jetzt viel sauberer.
Beziehung des ISP zu anderen SOLID-Prinzipien
Einzelverantwortung
Nach der Aufteilung der Schnittstellen in verschiedene Schnittstellen haben nun alle Schnittstellen wie IPrint und IScan eine einzige Verantwortung
Liskov-Ersatz
Aufgrund der Trennung folgen nun alle Klassen (die die Schnittstellen implementieren) der Liskov-Ersetzung, da alle Untertypen oder implementierenden Klassen durch ihre Schnittstellenreferenzvariable ersetzt werden können
Das obige ist der detaillierte Inhalt vonPrinzip der Schnittstellentrennung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!