ConstructiCat Logo
CodeBust.
Browse section ▾

Ocultar Delegado.

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.

##Example

Antes
Client Class Person getDepartment() Department getManager()
Después
Client Class Person getManager() Department

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