"Padrão decorador" de padrões de design

Qual é o padrão decorador

O padrão decorator é um padrão de design estrutural que envolve dinamicamente o objeto original. O padrão decorador pode estender dinamicamente suas características funcionais sem alterar a classe original adicionando ou modificando as funções da classe existente. Esse padrão é um padrão wrapper, ou seja, uma maneira de usar a composição do objeto para fornecer aprimoramentos funcionais ao objeto original.
Adicione dinamicamente algumas responsabilidades adicionais a um objeto. O padrão decorator é mais flexível do que subclasses em termos de adição de funcionalidade.

Por que usar o padrão decorador

Geralmente, costumamos usar herança para estender uma classe, porque a herança apresenta recursos estáticos à classe e, com o aumento das funções estendidas, as subclasses serão expandidas.
Usando o padrão decorador, você pode adicionar recursos funcionais a objetos de maneira mais flexível e dinâmica, em vez de implementar extensões funcionais por meio de herança. Usando o padrão decorador, podemos reduzir ao máximo a repetição de código e melhorar a capacidade de reutilização e manutenção do código.

Onde você usa no trabalho

Estenda as classes sem adicionar muitas subclasses.
No Android, o padrão decorator é amplamente utilizado em Drawables de diversas Views no sistema. Por exemplo, podemos usar LayerDrawable para realizar a combinação de vários Drawables e também podemos obter efeitos dinâmicos alterando a transparência, o ângulo de rotação etc.

ideias de design

A ideia central do padrão decorador é estender dinamicamente as características funcionais do objeto por meio de vários decoradores. O padrão decorator tem quatro funções:

1) Componente abstrato (Component): define a interface que o objeto precisa implementar.

2) ConcreteComponent: implementa a interface do componente abstrato e define a implementação básica que precisa ser estendida.

3) Abstract decorator (Decorator): Herdado de Component, precisa conter uma instância de Component, para que a função de Component possa ser estendida.

4) Concrete Decorator (ConcreteDecorator): implementa a interface do abstract decorator, e estende as funções atuais do Component.

Código

O código de implementação de um decorador Drawable comum no Android é dado abaixo:

public class CircleDrawable extends Drawable {
    
    
    private Paint mPaint;
    private Drawable mDrawable;

    public CircleDrawable(Drawable drawable) {
    
    
        mDrawable = drawable;
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.WHITE);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    public void draw(@NonNull Canvas canvas) {
    
    
        Rect bounds = getBounds();
        canvas.drawCircle(bounds.centerX(), bounds.centerY(),
                Math.min(bounds.width(), bounds.height()) / 2, mPaint);
        mDrawable.setBounds(bounds);
        mDrawable.draw(canvas);
    }

    @Override
    public void setAlpha(int alpha) {
    
    
        mDrawable.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {
    
    
        mDrawable.setColorFilter(colorFilter);
    }

    @Override
    public int getOpacity() {
    
    
        return mDrawable.getOpacity();
    }
}

Neste exemplo, CircleDrawable é um decorador que contém uma instância de Drawable e estende a função de recorte circular para Drawable. Ao herdar o Drawable e implementar sua interface, o CircleDrawable pode estender dinamicamente os recursos do Drawable e também pode aninhar vários decoradores para obter funções mais complexas.

Resumir

O padrão decorador é um padrão de design flexível e dinâmico para estender a funcionalidade do objeto. No Android, o modo decorador é amplamente utilizado no Drawable of View, para realizar a extensão da aparência, efeito dinâmico e outras características funcionais de vários controles. O padrão decorador realiza a expansão dinâmica das características funcionais por meio de quatro funções, incluindo componentes abstratos, componentes concretos, decoradores abstratos e decoradores concretos. Usando o padrão decorador, podemos reduzir ao máximo a repetição de código e melhorar a capacidade de reutilização e manutenção do código.

Acho que você gosta

Origin blog.csdn.net/weixin_45112340/article/details/129777954
Recomendado
Clasificación