Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Extraer interfaz.

Problema

Varios clientes utilizan la misma parte de la interfaz de una clase. Otro caso: parte de la interfaz de dos clases es idéntica.

Solución

Mueve esa porción idéntica a su propia interfaz.

##Ejemplo

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

##Por qué refactorizar

  1. Las interfaces resultan muy apropiadas cuando las clases desempeñan papeles especiales en distintas situaciones. Usa Extraer interfaz para indicar de forma explícita cuál es ese papel.

  2. Otro caso conveniente surge cuando necesitas describir las operaciones que una clase realiza sobre su servidor. Si se planea permitir con el tiempo el uso de servidores de múltiples tipos, todos los servidores deben implementar la interfaz.

##Cómo refactorizar

  1. Crea una interfaz vacía.

  2. Declara las operaciones comunes en la interfaz.

  3. Declara que las clases necesarias implementan la interfaz.

  4. Cambia las declaraciones de tipo en el código cliente para que usen la nueva interfaz.