JavaRush /Blog Java /Random-ES /Patrón de diseño decorador con ejemplos.
Sbv239
Nivel 23
Санкт-Петербург

Patrón de diseño decorador con ejemplos.

Publicado en el grupo Random-ES
El patrón de diseño decorador nos permite agregar dinámicamente funcionalidad a un objeto sin afectar el comportamiento de objetos de la misma clase. Suena un poco confuso, pero una vez que veas el código todo quedará más claro. Características - Un decorador le permite agregar funcionalidad a un objeto existente sin cambiar su estructura, es decir, la clase original no cambia - El patrón de diseño del decorador es un patrón estructural que proporciona un contenedor para una clase existente - Se crean clases de decorador que envuelve la clase original y proporciona funcionalidad adicional mientras preserva intactas las firmas de los métodos de la clase original: el patrón de diseño del decorador se usa con mayor frecuencia para seguir el principio de responsabilidad única de SOLID, ya que no cargamos la clase original con responsabilidades adicionales, sino que las dividimos. en clases de decorador - El decorador es estructuralmente casi similar al patrón de cadena de responsabilidad (cadena de responsabilidad) Se deben tener en cuenta los siguientes puntos clave - Un decorador es útil para poder modificar el comportamiento de un objeto durante el tiempo de ejecución. Este código es fácil de mantener y ampliar. - La desventaja de este patrón es que se utiliza una gran cantidad de objetos decoradores del mismo tipo - El patrón decorador se usa a menudo en clases Java IO (FileReader, BufferedReader, etc.) Qué haremos - Crear una interfaz - Crear concreto implementaciones de esta interfaz - Cree un decorador abstracto, implementando esta interfaz - Creemos un decorador concreto que herede de un decorador abstracto - Use un decorador concreto para "decorar" implementaciones concretas de la interfaz Implementación : Crearemos la interfaz Shape y las clases concretas que implementan esta interfaz. A continuación, crearemos una clase decoradora abstracta, ShapeDecorator, que implementa la interfaz Shape y tiene un objeto Shape como campo de clase. Patrón de diseño decorador con ejemplos - 1 - Shape es el nombre de la interfaz - Las clases Rectángulo, Triángulo y Círculo serán clases concretas que implementan la interfaz Shape - ShapeDecorator es una clase decoradora abstracta que implementa la misma interfaz Shape - RedShapeDecorator es una clase concreta que implementa ShapeDecorator - Demo es una clase de demostración en la que usaremos RedShapeDecorator para decorar objetos Shape Paso 1 : crear la interfaz Shape
public interface Shape {
    void draw();
}
Paso 2 : creemos varias implementaciones de esta interfaz. En el siguiente ejemplo solo habrá un círculo, pero en realidad crearemos un par más: un rectángulo y un triángulo.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Paso 3 : crea un decorador abstracto que implemente la interfaz Shape
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

    //Конструктор, принимающий un objeto Shape
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    public void draw() {
        decoratedShape.draw();
    }
}
Paso 4 : crea una clase decoradora concreta que hereda de la clase abstracta
public class RedShapeDecorator extends ShapeDecorator{

    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }

    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }

    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Сообщение от RedShapeDecorator. Цвет границы: красный");
    }
}
Paso 5 : use RedShapeDecorator para colorear nuestros objetos
public class Demo {
    public static void main(String[] args)
    {
        Shape circle = new Circle();
        Shape redCircle= new RedShapeDecorator(new Circle());
        Shape redRectangle= new RedShapeDecorator(new Rectangle());
        Shape redTriangle = new RedShapeDecorator(new Triangle());

        System.out.println("\nОбычный круг:");
        circle.draw();

        System.out.println("\nКруг с красной границей:");
        redCircle.draw();

        System.out.println("\nПрямоугольник с красной границей:");
        redRectangle.draw();

        System.out.println("\nТреугольник с красной границей:");
        redTriangle.draw();
    }
}
Paso 6 : mira la consola y regocíjate
Обычный круг:
Я круг!

Круг с красной границей:
Я круг!
Сообщение от RedShapeDecorator. Цвет границы: красный

Прямоугольник с красной границей:
Я прямоугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Habiendo analizado el patrón de diseño decorador como ejemplo, podemos concluir que su uso está justificado en los siguientes casos: - Cuando queremos añadir, mejorar o posiblemente eliminar el comportamiento o estado de un objeto - Cuando simplemente queremos cambiar la funcionalidad de un objeto específico de una clase y no dejar el resto sin cambios ¡Gracias! Repositorio con archivos de proyecto Basado en un artículo del sitio geeksforgeeks.org Mi blog para un desarrollador Java principiante
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION