ConstructiCat Logo
CodeBust.
Browse section ▾

Ocultar Delegação.

Problem

O cliente obtém o objeto B a partir de um campo ou método do objeto A. Em seguida, o cliente chama um método do objeto B.

Solution

Crie um novo método na classe A que delega a chamada ao objeto B. Agora o cliente não conhece a classe B nem depende dela.

##Example

Antes
Client Class Person getDepartment() Department getManager()
Depois
Client Class Person getManager() Department

##Why Refactor

Para começar, vejamos a terminologia:

  • O Servidor é o objeto ao qual o cliente tem acesso direto.

  • O Delegado é o objeto final que contém a funcionalidade necessária ao cliente.

Uma cadeia de chamadas surge quando um cliente solicita um objeto a outro objeto, então esse segundo objeto solicita outro, e assim por diante. Essas sequências de chamadas envolvem o cliente na navegação pela estrutura de classes. Quaisquer alterações nessas inter-relações exigirão alterações do lado do cliente.

##Benefits

  • Oculta a delegação do cliente. Quanto menos o código cliente precisar saber sobre os detalhes das relações entre objetos, mais fácil será fazer alterações no seu programa.

##How to Refactor

  1. Para cada método da classe-delegada chamado pelo cliente, crie um método na classe-servidora que delega a chamada à classe-delegada.

  2. Altere o código cliente para que ele chame os métodos da classe-servidora.

  3. Se suas alterações liberarem o cliente da necessidade da classe-delegada, você poderá remover da classe-servidora o método de acesso à classe-delegada (o método que originalmente era usado para obter a classe-delegada).