Mi granito de java: Wrapper: Decorator vs Adapter

sábado, 4 de junio de 2011

Wrapper: Decorator vs Adapter

Es recomendable leer este post luego de haber leído los patrones Adapter y Decorator, ya que a ambos se los llama Wrapper ("envoltorio"). Es probable que quien haya leído por primera vez a ambos patrones no entiendan como es posible tamaña comparación entre ambos, siendo tan diferenciados: un decorador solo cambia las responsabilidades del objeto, no su interface. El patrón Adapter cambia el interface.

¿Entonces, porque se los llama igual? 
Bueno, les voy a mostrar un ejemplo:

Como verán es una clase común y corriente, sin nada en especial. Veamos otra clase llama AgenteEncubierto:
Prestemos atención a lo siguiente: la clase AgenteEncubierto recibo una Persona como parámetro en el constructor. Pero evidentemente el AgenteEncubierto no puede revelar ciertos datos sensibles como su apellido o dirección y por ello mismo tiene datos prefijados en sus getters.
Otros datos, como su edad no son problema, con lo cual devuelve la edad de la persona.
Funcionan de la siguiente manera:

Luego de haber visto este ejemplo, les voy a hacer una simple pregunta,¿ la clase AgenteEncubierto adapta la clase Persona o la decora?
Es en vano toda discusión, nadie se pone de acuerdo. Muchas veces se utiliza el patrón Decorator de esta forma y, como se puede observar, es una propuesta muy cercana al Patrón Adapter.
Entonces de nuevo: ¿AgenteEncubierto decora o adapta a Persona? En realidad, la "envuelve".

No hay comentarios: