Saltar al contenido
Portada » Patrón de diseño: Decorator

Patrón de diseño: Decorator

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ónDescripción
Factoría (Factory)Abstrae clientes de la instanciación de objetos de una librería.
ObserverDesacopla el sujeto de los observadores para notificar su estado.
SingletonComo tener una única instancia de una clase en memoria.
DecoratorAñadir responsabilidades a un objeto de forma dinámica.

Recursos básicos Java

AsuntoDescripción
Tutorial básico y sintaxisTutorial 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 LambdaAquí te enseñamos las nociones más importantes para arrancas con funciones lambda
PalíndromosPrograma de ejemplo para el uso de palíndromos en Java.
Máquina Virtual de JavaTe explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM)
JDK, JRE y JVMDiferencias entre el JDK, JRE y JVM.
Mejores libros Java en EspañolHazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas
TensorFlowManejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución
Tutorial Log4jTutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java
Java SecurityEntiende y aplica las posibilidades que da Java para mantener la seguridad
Tutorial JConsoleAprende los conceptos básicos de monitorización de procesos Java con JConsole
JavaFXTutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web.
Estructuras de datos en JavaExplicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol.
JavaapiConjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar
Algoritmo HuffmanMétodo eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes