Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Extraire l'interface.

Problème

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.

Solution

Déplacez cette portion identique dans sa propre interface.

##Exemple

Avant
class Employee {
  double getRate() { return rate; }
  boolean hasSpecialSkill() { return special; }
}
class Timesheet {
  double charge(Employee emp, int days) {
    return emp.getRate() * days;
  }
}
Après
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

  1. 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.

  2. 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

  1. Créez une interface vide.

  2. Déclarez les opérations communes dans l'interface.

  3. Déclarez les classes nécessaires comme implémentant l'interface.

  4. Modifiez les déclarations de type dans le code client pour utiliser la nouvelle interface.