Modèle de décorateur dans la série de modèles de conception Java
Qu'est-ce que le motif Décorateur ?
Ajoutez dynamiquement des responsabilités supplémentaires à un objet. En termes d'ajout de fonctionnalités, le modèle Decorator est plus flexible que la génération de sous-classes.
1. Structure
Composant : Définir une interface d'objet qui peut ajouter dynamiquement des responsabilités à ces objets.
interface Component { public void operation(); } ConcreteComponent : 实现 Component 定义的接口。 class ConcreteComponent implements Component { @Override public void operation() { System.out.println("初始行为"); } }
Decorator : Classe abstraite décorative, qui hérite de Component et étend les fonctions de la classe Component à partir de classes externes, mais pour Component, il n'est pas nécessaire de connaître l'existence de Decorator.
class Decorator implements Component { // 持有一个 Component 对象,和 Component 形成聚合关系 protected Component component; // 传入要进一步修饰的对象 public Decorator(Component component) { this.component = component; } @Override // 调用要修饰对象的原方法 public void operation() { component.operation(); } }
ConcreteDecorator : Un objet de décoration spécifique qui a pour fonction d'ajouter des responsabilités au composant.
class ConcreteDecoratorA extends Decorator { private String addedState = "新属性1"; public ConcreteDecoratorA(Component component) { super(component); } public void operation() { super.operation(); System.out.println("添加属性: " + addedState); } } class ConcreteDecoratorB extends Decorator { public ConcreteDecoratorB(Component component) { super(component); } public void operation() { super.operation(); AddedBehavior(); } public void AddedBehavior() { System.out.println("添加行为"); } }
Code du test
public class DecoratorPattern { public static void main(String[] args) { Component component = new ConcreteComponent(); component.operation(); System.out.println("======================================"); Decorator decoratorA = new ConcreteDecoratorA(component); decoratorA.operation(); System.out.println("======================================"); Decorator decoratorB = new ConcreteDecoratorB(decoratorA); decoratorB.operation(); } }
Résultat en cours
初始行为 ====================================== 初始行为 添加属性: 新属性1 ====================================== 初始行为 添加属性: 新属性1 添加行为
2. Scénarios d'application
1 Il est nécessaire d'ajouter des responsabilités à un objet de manière dynamique et transparente, c'est-à-dire sans affecter les autres objets.
2. Les fonctions doivent être ajoutées dynamiquement à un objet, et ces fonctions peuvent être révoquées dynamiquement.
3. Un très grand nombre de fonctions générées par la permutation et la combinaison de certaines fonctions de base doivent être ajoutées, ce qui rend la relation d'héritage irréaliste.
4. Lorsque la méthode de génération de sous-classes ne peut pas être utilisée pour l'expansion. Dans un cas, il peut y avoir un grand nombre d'extensions indépendantes, et un grand nombre de sous-classes seront générées pour prendre en charge chaque combinaison, provoquant une explosion du nombre de sous-classes. Un autre cas pourrait être dû au fait que la définition de classe est masquée ou qu'elle ne peut pas être utilisée pour générer des sous-classes.
3. Points clés
1. Les objets décorés et les objets réels ont la même interface. L'objet client peut ainsi interagir avec l'objet décoré de la même manière qu'un objet réel.
2. L'objet de décoration contient une référence à l'objet réel.
3. L'objet de décoration accepte toutes les demandes du client. Il transmet ces requêtes aux objets réels.
4. L'objet de décoration peut ajouter quelques fonctions supplémentaires avant ou après la transmission de ces demandes. Cela garantit que des fonctionnalités supplémentaires peuvent être ajoutées en externe au moment de l'exécution sans modifier la structure d'un objet donné. Dans la conception orientée objet, l’extension fonctionnelle d’une classe donnée est généralement implémentée via l’héritage.
Ce qui précède est une introduction au modèle de décorateur Java. J'espère qu'il sera utile à l'apprentissage de chacun.
Pour plus d'articles liés au modèle décorateur dans la série de modèles de conception Java, veuillez faire attention au site Web PHP chinois !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.
