Heim> Java> javaLernprogramm> Hauptteil

Prinzip der Schnittstellentrennung

王林
Freigeben: 2024-08-25 22:30:33
Original
836 Leute haben es durchsucht

Interface Segregation Principle

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(); }
Nach dem Login kopieren

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 } }
Nach dem Login kopieren
Die

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() {} }
Nach dem Login kopieren

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() {} }
Nach dem Login kopieren

Techniken zur Identifizierung von ISP-Verstößen

  • Fat-Schnittstellen(Schnittstellen mit zwei Methodendeklarationen)
  • Schnittstellen mit geringer Kohäsion(Schnittstellen mit Methoden, die wahrscheinlich nicht miteinander in Beziehung stehen)
  • *Implementierung leerer Methoden *(Wenn Klassen gezwungen werden, Methoden zu implementieren, die sie nicht verwenden, belassen sie die Implementierung der Methoden mit leerem Text)

Prinzip der Schnittstellentrennung:

public interface IPrint { public void print(); public void getPrintSpoolDetails(); }
Nach dem Login kopieren
public interface IScan { public void scan(); public void scanPhoto(); }
Nach dem Login kopieren
public interface IFax { public void fax(); public void internetFax(); }
Nach dem Login kopieren
/** * * 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 } }
Nach dem Login kopieren
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 } }
Nach dem Login kopieren
public class CanonPrinter implements IPrint { @Override public void print() { // real printing code } @Override public void getPrintSpoolDetails() { // real get print spool details code } }
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!