Delegation - Tensho97/Aprende-a-Aprender GitHub Wiki
Patrón delegation
Utilidades y ventajas
Utilidad: Cuando se quiere extender y reutilizar la funcionalidad de una clase SIN USAR LA HERENCIA.
Ventajas:
- En vez de herencia múltiple.
- Cuando una clase que hereda de otra quiere ocultar algunos de los métodos heredados.
- Compartir código que NO se puede heredar.
Problema
Tenemos las siguientes clases:
ClaseA{
a1();
}
-----------
Clase B{
b1();
b2();
}
Y queremos una claseC que herede de ambas, y disponer de lo siguiente:
ClaseC{
a1();
b1();
b2();
}
Solución
Como no se admite la herencia múltiple, solo podemos usarla con una de las clases. Siguiendo con el ejemplo anterior:
Tendremos ahora la siguiente clase C:
ClaseC extends ClaseA{
a1(); // metodo de la ClaseA
}
Para implementar los métodos de ClaseB no usaremos la herencia sino la relación "usa". Para implementar esta relación crearemos un objeto de ClaseB en el constructor de la ClaseC. Una vez hecho esto creamos los métodos de ClaseB.
ClassC extends ClaseA{
ClaseB objB;
//Constructor
ClassC(){
objB = new B(); //Objeto de Clase B
}
a1() //metodo heredado de ClaseA
void b1(){ //de este modo tenemos el metodo b1
objB.b1();
}
//metodo b2() se implementa del mismo modo
De este modo conseguimos la herencia sin usar extends, y en caso de no querer usar algún método de la clase heredada, no se implementa.
Autor : Miguel