"Modèle Décorateur" de Design Patterns

Quel est le motif du décorateur

Le motif décorateur est un motif de conception structurelle qui enveloppe dynamiquement l'objet d'origine. Le motif décorateur peut étendre dynamiquement ses caractéristiques fonctionnelles sans changer la classe d'origine en ajoutant ou en modifiant les fonctions de la classe existante. Ce modèle est un modèle wrapper, c'est-à-dire un moyen d'utiliser la composition d'objets pour apporter des améliorations fonctionnelles à l'objet d'origine.
Ajoutez dynamiquement des responsabilités supplémentaires à un objet. Le modèle de décorateur est plus flexible que le sous-classement en termes d'ajout de fonctionnalités.

Pourquoi utiliser le motif décorateur

Généralement, nous utilisons souvent l'héritage pour étendre une classe, car l'héritage introduit des fonctionnalités statiques dans la classe, et avec l'augmentation des fonctions étendues, les sous-classes se développeront.
À l'aide du modèle de décorateur, vous pouvez ajouter des fonctionnalités fonctionnelles aux objets de manière plus flexible et dynamique, plutôt que d'implémenter des extensions fonctionnelles par héritage. En utilisant le modèle de décorateur, nous pouvons réduire autant que possible la répétition du code et améliorer la réutilisation et la maintenabilité du code.

Où l'utilisez-vous au travail

Étendez les classes sans ajouter de nombreuses sous-classes.
Dans Android, le modèle de décorateur est largement utilisé dans les Drawables de différentes vues du système. Par exemple, nous pouvons utiliser LayerDrawable pour réaliser la combinaison de plusieurs Drawables, et nous pouvons également obtenir des effets dynamiques en modifiant la transparence, l'angle de rotation, etc.

Idées de conception

L'idée centrale du motif décorateur est d'étendre dynamiquement les caractéristiques fonctionnelles de l'objet à travers plusieurs décorateurs. Le pattern décorateur a quatre rôles :

1) Composant abstrait (Component): définit l'interface que l'objet doit implémenter.

2) ConcreteComponent : implémente l'interface du composant abstrait et définit l'implémentation de base qui doit être étendue.

3) Décorateur abstrait (Decorator): Hérité de Component, il doit contenir une instance de Component, afin que la fonction de Component puisse être étendue.

4) Décorateur concret (ConcreteDecorator): implémente l'interface du décorateur abstrait et étend les fonctions réelles du composant.

Code

Le code d'implémentation d'un décorateur Drawable commun dans Android est donné ci-dessous :

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

Dans cet exemple, CircleDrawable est un décorateur qui contient une instance de Drawable et étend la fonction de découpage circulaire pour Drawable. En héritant de Drawable et en implémentant son interface, CircleDrawable peut étendre dynamiquement les fonctionnalités de Drawable, et peut également imbriquer plusieurs décorateurs pour réaliser des fonctions plus complexes.

Résumer

Le modèle de décorateur est un modèle de conception flexible et dynamique pour étendre la fonctionnalité de l'objet. Dans Android, le mode décorateur est largement utilisé dans le Drawable of View, afin de réaliser l'extension de l'apparence, de l'effet dynamique et d'autres caractéristiques fonctionnelles de divers contrôles. Le motif décorateur réalise l'expansion dynamique des caractéristiques fonctionnelles à travers quatre rôles, y compris les composants abstraits, les composants concrets, les décorateurs abstraits et les décorateurs concrets. En utilisant le modèle de décorateur, nous pouvons réduire autant que possible la répétition du code et améliorer la réutilisation et la maintenabilité du code.

Guess you like

Origin blog.csdn.net/weixin_45112340/article/details/129777954