
El patrón Decorator sirve para añadir responsabilidades adicionales a un objeto de forma dinámica. Los “Decoradores” sirven como alternativa flexible a la creación de subclases para extender funcionalidades. Algunas de las características más importantes de este patrón:
- Todos los Decorators tienen el mismo super tipo que el objeto que decoran.
- Se pueden usar múltiples decoradores para envolver un objeto.
- Como los decoradores son del mismo tipo que el objeto, podemos trasladar el objeto decorado en vez del original. No va a dar errores de casteo (casting).
- Podemos decorar objetos en tiempo de ejecución.
Diagrama UML

Implementación Java
Forma.java
public interface Forma
{
void dibujar();
}
Rectangulo.java
public class Rectangulo implements Forma {
@Override public void dibujar()
{
System.out.println("Forma: Rectangulo");
}
}
Circulo.java
public class Circulo implements Forma {
@Override
public void dibujar()
{
System.out.println("Forma: Circulo");
}
}
DecoradorForma.java
public abstract class DecoradorForma implements Forma {
protected Forma formaDecorada;
public DecoradorForma (Forma formaDecorada)
{
this.formaDecorada = formaDecorada;
}
public void dibujar() { formaDecorada.dibujar(); }
}
DecoradorFormaRoja.java
public class DecoradorFormaRoja extends DecoradorForma {
public DecoradorFormaRoja (Forma formaDecorada)
{
super(formaDecorada);
}
@Override
public void dibujar()
{
formaDecorada.draw();
establecerBordeRojo(formaDecorada);
}
private void establecerBordeRojo(Forma formaDecorada)
{
System.out.println("Color borde: Rojo");
}
}
DecoradorDemo.java
public class DecoradorDemo {
public static void main(String[] args)
{
Forma circulo = new Circulo();
Forma circuloRojo
= new DecoradorFormaRoja (new Circulo());
Forma rectanguloRojo = new DecoradorFormaRoja(new Rectangulo());
System.out.println("Circulo con borde normal");
circulo.draw();
System.out.println("Circulo rojo");
circuloRojo.dibujar();
System.out.println("Rectangulo rojo");
rectanguloRojo.dibujar();
}
}
Hazte con los mejores libros sobre patrones de diseño
Design Patterns: Elements of Reusable Object-Oriented Software – Erich Gamma

Patrones de diseño en Java. Los 23 modelos de diseño

Fácil Aprendizaje Patrones de Diseño Java

Más patrones de diseño
| Patrón | Descripción |
| Factoría (Factory) | Abstrae clientes de la instanciación de objetos de una librería. |
| Observer | Desacopla el sujeto de los observadores para notificar su estado. |
| Singleton | Como tener una única instancia de una clase en memoria. |
| Decorator | Añadir responsabilidades a un objeto de forma dinámica. |
Recursos básicos Java
| Asunto | Descripción |
| Tutorial básico y sintaxis | Tutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje. |
| Hilos (Threads) | Aprende a manejar hilos y las cuestiones básicas de la concurrencia |
| Funciones Lambda | Aquí te enseñamos las nociones más importantes para arrancas con funciones lambda |
| Palíndromos | Programa de ejemplo para el uso de palíndromos en Java. |
| Máquina Virtual de Java | Te explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM) |
| JDK, JRE y JVM | Diferencias entre el JDK, JRE y JVM. |
| Mejores libros Java en Español | Hazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas |
| TensorFlow | Manejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución |
| Tutorial Log4j | Tutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java |
| Java Security | Entiende y aplica las posibilidades que da Java para mantener la seguridad |
| Tutorial JConsole | Aprende los conceptos básicos de monitorización de procesos Java con JConsole |
| JavaFX | Tutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web. |
| Estructuras de datos en Java | Explicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol. |
| Javaapi | Conjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar |
| Algoritmo Huffman | Método eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes |