Extraire l'interface.
Plusieurs clients utilisent la même partie de l'interface d'une classe. Autre cas : une partie de l'interface est identique dans deux classes.
Déplacez cette portion identique dans sa propre interface.
##Exemple
class Employee {
double getRate() { return rate; }
boolean hasSpecialSkill() { return special; }
}
class Timesheet {
double charge(Employee emp, int days) {
return emp.getRate() * days;
}
}interface Billable {
double getRate();
}
class Employee implements Billable {
public double getRate() { return rate; }
boolean hasSpecialSkill() { return special; }
}
class Timesheet {
double charge(Billable emp, int days) {
return emp.getRate() * days;
}
}##Pourquoi refactoriser
-
Les interfaces sont très pertinentes lorsque les classes jouent des rôles particuliers dans différentes situations. Utilisez Extraire l'interface pour indiquer explicitement quel rôle.
-
Un autre cas pratique se présente lorsque vous devez décrire les opérations qu'une classe effectue sur son serveur. S'il est prévu d'autoriser à terme l'utilisation de serveurs de plusieurs types, tous les serveurs doivent implémenter l'interface.
##Comment refactoriser
-
Créez une interface vide.
-
Déclarez les opérations communes dans l'interface.
-
Déclarez les classes nécessaires comme implémentant l'interface.
-
Modifiez les déclarations de type dans le code client pour utiliser la nouvelle interface.