JavaRush /Blogue Java /Random-PT /Padrão de design de decorador com exemplos
Sbv239
Nível 23
Санкт-Петербург

Padrão de design de decorador com exemplos

Publicado no grupo Random-PT
O padrão de design decorador nos permite adicionar funcionalidade dinamicamente a um objeto sem afetar o comportamento dos objetos da mesma classe. Parece um pouco confuso, mas depois de ver o código tudo ficará mais claro. Características - Um decorador permite adicionar funcionalidade a um objeto existente sem alterar sua estrutura, ou seja, a classe original não muda - O padrão de design decorador é um padrão estrutural que fornece um wrapper para uma classe existente - Classes decoradoras são criadas que envolver a classe original e fornecer funcionalidade adicional enquanto preserva intactas as assinaturas dos métodos da classe original - O padrão de design decorador é mais frequentemente usado para seguir o princípio de responsabilidade única do SOLID, uma vez que não carregamos a classe original com responsabilidades adicionais, mas as dividimos em classes de decoradores - O decorador é estruturalmente quase semelhante ao padrão de cadeia de responsabilidade (cadeia de responsabilidade) Os seguintes pontos-chave devem ser levados em consideração - Um decorador é útil por poder modificar o comportamento de um objeto durante o tempo de execução. Este código é fácil de manter e estender. - A desvantagem deste padrão é que um grande número de objetos decoradores do mesmo tipo são usados ​​- O padrão decorador é frequentemente usado em classes Java IO (FileReader, BufferedReader, etc.) O que faremos - Criar uma interface - Criar concreto implementações desta interface - Crie um decorador abstrato, implementando esta interface - Vamos criar um decorador concreto que herda de um decorador abstrato - Use um decorador concreto para "decorar" implementações concretas da interface Implementação : Criaremos a interface Shape e as classes concretas que implementam esta interface. A seguir, criaremos uma classe de decorador abstrata, ShapeDecorator, que implementa a interface Shape e tem um objeto Shape como campo de classe. Padrão de design de decorador com exemplos - 1 - Shape é o nome da interface - As classes Rectangle, Triangle e Circle serão classes concretas que implementam a interface Shape - ShapeDecorator é uma classe decorativa abstrata que implementa a mesma interface Shape - RedShapeDecorator é uma classe concreta que implementa ShapeDecorator - Demo é uma classe de demonstração na qual usaremos RedShapeDecorator para decorar objetos Shape Etapa 1 : criar a interface Shape
public interface Shape {
    void draw();
}
Passo 2 : Vamos criar diversas implementações desta interface. No exemplo abaixo haverá apenas um círculo, mas na verdade criaremos mais alguns: um retângulo e um triângulo.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Etapa 3 : Crie um decorador abstrato que implemente a interface Shape
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

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

    public void draw() {
        decoratedShape.draw();
    }
}
Etapa 4 : crie uma classe de decorador concreta que herde da classe abstrata
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. Цвет границы: красный");
    }
}
Etapa 5 : use RedShapeDecorator para colorir nossos 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();
    }
}
Passo 6 : olhe para o console e alegre-se
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Tendo examinado o padrão de design decorador como exemplo, podemos concluir que a sua utilização se justifica nos seguintes casos: - Quando queremos adicionar, melhorar ou possivelmente remover o comportamento ou estado de um objeto - Quando queremos simplesmente alterar a funcionalidade de um objeto específico de uma classe e não deixe o resto sem alterações. Obrigado! Repositório com arquivos de projeto Baseado em um artigo do site geeksforgeeks.org Meu blog para um Java Dev iniciante
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION