---
title: "Ocultar Delegado"
type: "refactoring-technique"
slug: "hide-delegate"
url: "http://localhost:3000/es/hide-delegate.md"
category: "Moving Features between Objects"
description: "Problema: El cliente obtiene el objeto B a partir de un campo o método del objeto A. Después, el cliente llama a un método del objeto B. Solución: Crea un nuevo método en la clase A que delegue la llamada al objeto B. Ahora el cliente no conoce la clase B ni depende de ella."
---
# Ocultar Delegado

> Problema: El cliente obtiene el objeto B a partir de un campo o método del objeto A. Después, el cliente llama a un método del objeto B. Solución: Crea un nuevo método en la clase A que delegue la llamada al objeto B. Ahora el cliente no conoce la clase B ni depende de ella.

## Problem

El cliente obtiene el objeto B a partir de un campo o método del objeto A. Después, el cliente llama a un método del objeto B.

## Solution

Crea un nuevo método en la clase A que delegue la llamada al objeto B. Ahora el cliente no conoce la clase B ni depende de ella.

## Why Refactor

Para empezar, veamos algo de terminología:

* _Servidor_ es el objeto al que el cliente tiene acceso directo.
* _Delegado_ es el objeto final que contiene la funcionalidad que necesita el cliente.

Aparece una cadena de llamadas cuando un cliente solicita un objeto a otro objeto, después ese segundo objeto solicita otro, y así sucesivamente. Estas secuencias de llamadas obligan al cliente a navegar por la estructura de clases. Cualquier cambio en estas interrelaciones requerirá cambios en el lado del cliente.

## Benefits

* Oculta la delegación al cliente. Cuanto menos necesite saber el código cliente sobre los detalles de las relaciones entre objetos, más fácil será realizar cambios en tu programa.

## How to Refactor

1. Por cada método de la _clase delegada_ llamado por el cliente, crea un método en la _clase servidora_ que delegue la llamada a la _clase delegada_.
2. Cambia el código cliente para que llame a los métodos de la _clase servidora_.
3. Si tus cambios liberan al cliente de la necesidad de la _clase delegada_, puedes eliminar de la _clase servidora_ el método de acceso a la _clase delegada_ (el método que originalmente se usaba para obtener la _clase delegada_).
## Relations

**Opposite refactorings**

- [Eliminar intermediario](/es/remove-middle-man.md)

**Eliminates smells**

- [Cadenas de mensajes](/es/smells/message-chains.md)
- [Intimidad inapropiada](/es/smells/inappropriate-intimacy.md)

