---
title: "Ocultar Delegação"
type: "refactoring-technique"
slug: "hide-delegate"
url: "http://localhost:3000/pt-br/hide-delegate.md"
category: "Moving Features between Objects"
description: "Problema: 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. Solução: 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."
---
# Ocultar Delegação

> Problema: 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. Solução: 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.

## 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.

## 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_).
## Relations

**Opposite refactorings**

- [Remover Intermediário](/pt-br/remove-middle-man.md)

**Eliminates smells**

- [Cadeias de Mensagens](/pt-br/smells/message-chains.md)
- [Intimidade Inapropriada](/pt-br/smells/inappropriate-intimacy.md)

