Maison > Java > javaDidacticiel > Principe de séparation des interfaces

Principe de séparation des interfaces

王林
Libérer: 2024-08-25 22:30:33
original
976 Les gens l'ont consulté

Interface Segregation Principle

Aucun client ne devrait être obligé de dépendre d'une méthode qu'il n'utilise pas

Prenons l'exemple d'un espace de bureau où divers périphériques de sortie sont représentés à l'aide d'objets

Avant le principe de ségrégation des interfaces :

Interface IMultiFonction

/**
 * @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();
}
Copier après la connexion

Implémentation désormais de l'interface commune ci-dessus pour divers appareils

Classe XeroxWorkCenter ayant toutes les capacités

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

}
Copier après la connexion

La classe HpPrinterNScanner possède des capacités d'impression et de numérisation

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

}
Copier après la connexion

La classe CanonPrinter n'a qu'une capacité d'impression

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

}
Copier après la connexion

Techniques pour identifier la violation du FAI

  • Fat interfaces (Interfaces ayant deux nombreuses déclarations de méthodes)
  • Interfaces à faible cohésion (interfaces ayant des méthodes qui ne sont pas susceptibles d'être liées entre elles)
  • *Implémentation de méthodes vides *( lorsque les classes sont obligées d'implémenter des méthodes qu'elles n'utilisent pas, elles laissent l'implémentation des méthodes avec un corps vide)

Principe de ségrégation après interface :

public interface IPrint {
    public void print();
    public void getPrintSpoolDetails();
}
Copier après la connexion
public interface IScan {
    public void scan();
    public void scanPhoto();
}
Copier après la connexion
public interface IFax {
    public void fax();
    public void internetFax();
}
Copier après la connexion
/**
 * 
 * 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
    }

}
Copier après la connexion
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 
    }
}
Copier après la connexion
public class CanonPrinter implements IPrint {

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

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    } 
}
Copier après la connexion

Chaque interface a une seule responsabilité et est désormais beaucoup plus propre.

Relation qu'entretient le FAI avec d'autres principes SOLID

Responsabilité unique
Après la ségrégation des interfaces en différentes interfaces, désormais toutes les interfaces comme IPrint, IScan ont une seule responsabilité

Substitution Liskov
En raison de la ségrégation, toutes les classes (implémentant les interfaces) suivent désormais la substitution Liskov, car tous les sous-types ou classes implémentant peuvent être remplacés par leur variable de référence d'interface

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal