"Patrón decorador" de patrones de diseño

¿Qué es el patrón decorador?

El patrón decorador es un patrón de diseño estructural que envuelve dinámicamente el objeto original. El patrón decorador puede extender dinámicamente sus características funcionales sin cambiar la clase original agregando o modificando las funciones de la clase existente. Este patrón es un patrón envolvente, es decir, una forma de utilizar la composición de objetos para proporcionar mejoras funcionales al objeto original.
Agregue dinámicamente algunas responsabilidades adicionales a un objeto. El patrón decorador es más flexible que la subclasificación en términos de agregar funcionalidad.

Por qué usar el patrón decorador

En general, a menudo usamos la herencia para extender una clase, porque la herencia introduce características estáticas en la clase y, con el aumento de las funciones extendidas, las subclases se expandirán.
Con el patrón de decorador, puede agregar características funcionales a los objetos de una manera más flexible y dinámica, en lugar de implementar extensiones funcionales a través de la herencia. Usando el patrón decorador, podemos reducir la repetición del código tanto como sea posible y mejorar la reutilización y la mantenibilidad del código.

¿Dónde lo usas en el trabajo?

Extienda las clases sin agregar muchas subclases.
En Android, el patrón decorador se usa ampliamente en Drawables de varias vistas en el sistema. Por ejemplo, podemos usar LayerDrawable para realizar la combinación de múltiples Drawables, y también podemos lograr efectos dinámicos al cambiar la transparencia, el ángulo de rotación, etc.

Ideas de diseño

La idea central del patrón decorador es extender dinámicamente las características funcionales del objeto a través de múltiples decoradores. El patrón decorador tiene cuatro funciones:

1) Componente abstracto (Componente): define la interfaz que el objeto necesita implementar.

2) ConcreteComponent: implementa la interfaz del componente abstracto y define la implementación básica que debe ampliarse.

3) Decorador abstracto (Decorator): heredado de Component, necesita contener una instancia de Component, para que la función de Component pueda extenderse.

4) Decorador concreto (ConcreteDecorator): implementa la interfaz del decorador abstracto y amplía las funciones reales del Componente.

Código

El código de implementación de un decorador Drawable común en Android se proporciona a continuación:

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();
    }
}

En este ejemplo, CircleDrawable es un decorador que contiene una instancia de Drawable y amplía la función de recorte circular para Drawable. Al heredar Drawable e implementar su interfaz, CircleDrawable puede ampliar dinámicamente las funciones de Drawable y también puede anidar varios decoradores para lograr funciones más complejas.

Resumir

El patrón decorador es un patrón de diseño flexible y dinámico para ampliar la funcionalidad de los objetos. En Android, el modo decorador se usa ampliamente en el Drawable of View, para realizar la extensión de la apariencia, el efecto dinámico y otras características funcionales de varios controles. El patrón decorador realiza la expansión dinámica de las características funcionales a través de cuatro roles, que incluyen componentes abstractos, componentes concretos, decoradores abstractos y decoradores concretos. Usando el patrón decorador, podemos reducir la repetición del código tanto como sea posible y mejorar la reutilización y la mantenibilidad del código.

Supongo que te gusta

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