Maison > Java > javaDidacticiel > le corps du texte

Analyse du modèle de décorateur dans les modèles de conception Java

PHPz
Libérer: 2024-05-09 15:12:02
original
913 Les gens l'ont consulté

Le modèle décorateur est un modèle de conception structurelle qui permet d'ajouter dynamiquement des fonctionnalités d'objet sans modifier la classe d'origine. Il est mis en œuvre grâce à la collaboration de composants abstraits, de composants concrets, de décorateurs abstraits et de décorateurs concrets, et peut étendre de manière flexible les fonctions de classe pour répondre aux besoins changeants. Dans cet exemple, des décorateurs de lait et de moka sont ajoutés à Espresso pour un prix total de 2,29 $, démontrant la puissance du modèle de décorateur pour modifier dynamiquement le comportement des objets.

Analyse du modèle de décorateur dans les modèles de conception Java

Anatomie du modèle Decorator dans les modèles de conception Java

Introduction

Le modèle Decorator est un modèle de conception structurelle qui permet d'ajouter dynamiquement des fonctionnalités à un objet sans modifier sa classe de base. En utilisant des objets décorateurs, les fonctionnalités de classe peuvent être étendues de manière flexible pour répondre aux besoins changeants.

Principe

Le modèle de décorateur fonctionne de la manière suivante :

  1. Définissez une classe de composant abstrait qui déclare l'interface publique de l'objet à décorer.
  2. Implémentez une classe de composants concrets, qui implémente l'interface de la classe de composants abstraits.
  3. Définissez une classe de décorateur abstrait qui définit une interface pour des fonctionnalités supplémentaires pouvant être attachées à un composant concret.
  4. Implémentez la classe de décorateur concret, qui étend la classe de décorateur abstrait et implémente des fonctionnalités spécifiques.
  5. Utilisez le modèle de décorateur pour améliorer la fonctionnalité des composants en enveloppant des décorateurs spécifiques autour de composants spécifiques.

Exemple de code

// 抽象组件
interface Beverage {
    double cost();
}

// 具体组件
class Espresso implements Beverage {
    @Override
    public double cost() {
        return 1.99;
    }
}

// 抽象装饰器
abstract class CondimentDecorator implements Beverage {
    protected Beverage beverage;
    
    public CondimentDecorator(Beverage beverage) {
        this.beverage = beverage;
    }
}

// 具体装饰器
class Milk extends CondimentDecorator {
    public Milk(Beverage beverage) {
        super(beverage);
    }
    
    @Override
    public double cost() {
        return beverage.cost() + 0.10;
    }
}

// 具体装饰器
class Mocha extends CondimentDecorator {
    public Mocha(Beverage beverage) {
        super(beverage);
    }
    
    @Override
    public double cost() {
        return beverage.cost() + 0.20;
    }
}

// 实战案例
public class CoffeeShop {
    public static void main(String[] args) {
        Beverage espresso = new Espresso();
        
        // 添加牛奶和摩卡装饰器
        Beverage milkEspresso = new Milk(espresso);
        Beverage mochaMilkEspresso = new Mocha(milkEspresso);
        
        // 计算饮料总价
        double totalCost = mochaMilkEspresso.cost();
        
        System.out.println("Beverage cost: " + totalCost);
    }
}
Copier après la connexion

Sortie :

Beverage cost: 2.29
Copier après la connexion

Conclusion

Le modèle de décorateur peut être utilisé pour étendre dynamiquement les fonctionnalités d'un objet sans modifier le code existant. Il fournit un moyen flexible et élégant de répondre aux besoins changeants tout en gardant le code maintenable et extensible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal