Logotipo do ConstructiCat
CodeBust.
Explorar a seção ▾

Extrair Interface.

Problema

Vários clientes estão usando a mesma parte da interface de uma classe. Outro caso: parte da interface em duas classes é idêntica.

Solução

Mova essa porção idêntica para sua própria interface.

##Exemplo

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

  1. Interfaces são muito adequadas quando classes desempenham papéis especiais em diferentes situações. Use Extrair Interface para indicar explicitamente qual papel.

  2. Outro caso conveniente surge quando você precisa descrever as operações que uma classe realiza em seu servidor. Se for planejado permitir, no futuro, o uso de servidores de múltiplos tipos, todos os servidores devem implementar a interface.

##Como refatorar

  1. Crie uma interface vazia.

  2. Declare as operações comuns na interface.

  3. Declare as classes necessárias como implementadoras da interface.

  4. Altere as declarações de tipo no código cliente para usar a nova interface.