Delegation (patrón de diseño)
# Delegation (patrón de diseño)

En Ingeniería de software, el patrón de diseño de delegación es una técnica en la que un objeto de cara al exterior expresa cierto comportamiento pero en realidad delega la responsabilidad de implementar dicho comportamiento a un objeto asociado en una relación inversa de responsabilidad.

El patrón de diseño de Delegación es la abstracción fundamental que da soporte a la composición (también referida como agregación), los mixin y los aspectos.

## Ejemplos

### Ejemplo simple en Java

En este ejemplo realizado en el lenguaje de programación Java, la clase C tiene métodos "cabecera" (método stub) que realizan llamadas a los métodos f y g de la clase A

### Ejemplo complejo en Java

Utilizando interfaces Java, la delegación puede hacerse de manera más flexible y fuertemente tipada. En este ejemplo, la clase C puede delegar bien en la clase A o en la clase B. La clase C tiene métodos para conmutar entre las clases A y B. Utilizando la cláusula implements se asegura la fortaleza de tipos porque cada clase debe implementar los métodos definidos en la interfaz. La principal contrapartida es que se añade más código.

### Ejemplo complejo en C++

Este ejemplo es una versión en C++ del ejemplo complejo escrito en Java anterior. Puesto que C++ no tiene interfaces propiamente dichas, una clase abstracta realiza el mismo juego. Las ventajas y desventajas son principalmente las mismas que en el ejemplo en Java.

### Delegate reemplazado por la composición

Los beneficios que se obtienen con delegate son los mismos que se pueden obtener con la composición y uso de interfaces en lenguajes orientados a objetos.

