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

Substituir Delegação por Herança.

Problema

Uma classe contém muitos métodos simples que delegam a todos os métodos de outra classe.

Solução

Faça a classe herdar do delegado, o que torna os métodos delegadores desnecessários.

##Exemplo

Antes
class Employee {
  private Person person = new Person();

  String getName() { return person.getName(); }
  void setName(String arg) { person.setName(arg); }
}
Depois
class Employee extends Person {
}

##Por que refatorar

A delegação é uma abordagem mais flexível que a herança, já que permite mudar como a delegação é implementada e colocar outras classes ali também. Mesmo assim, a delegação deixa de ser benéfica se você delega ações a apenas uma classe e a todos os seus métodos públicos.

Nesse caso, ao substituir a delegação por herança, você limpa a classe de um grande número de métodos delegadores e se poupa de precisar criá-los para cada novo método da classe delegada.

##Benefícios

  • Reduz o tamanho do código. Todos esses métodos delegadores deixam de ser necessários.

##Como refatorar

  1. Faça a classe ser uma subclasse da classe delegada.

  2. Coloque o objeto atual em um campo que contém uma referência ao objeto delegado.

  3. Exclua um a um os métodos de delegação simples. Se seus nomes eram diferentes, use Renomear Método para dar a todos os métodos um único nome.

  4. Substitua todas as referências ao campo delegado por referências ao objeto atual.

  5. Remova o campo delegado.