ConstructiCat Logo
CodeBust.
Browse section ▾

Substituir Delegação por Herança.

Problem

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

Solution

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

##Example

Antes
Employee persongetName() Person getName() return $this->person->getName(); 1
Depois
Person getName() Employee

##Why Refactor

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.

##Benefits

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

##How to Refactor

  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.