„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Prinzip der Schnittstellentrennung

Prinzip der Schnittstellentrennung

Veröffentlicht am 26.08.2024
Durchsuche:641

Interface Segregation Principle

Kein Client sollte gezwungen werden, von einer Methode abhängig zu sein, die er nicht verwendet

Betrachten Sie ein Beispiel für einen Büroraum, in dem verschiedene Ausgabegeräte durch Objekte dargestellt werden

Vor dem Prinzip der Schnittstellentrennung:

IMultiFunction Interface

/**
 * @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
    }

}

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() {}

}

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

  • Fette 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();
}
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-Ersetzung
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.
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/prashantrmishra/interface-segregation-principle-4e97?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3