


Introduction au modèle d'apparence et au modèle de décorateur dans les modèles de conception Java (exemple de code)
Cet article vous présente une introduction au mode d'apparence et au mode décorateur dans les modèles de conception Java (exemples de code). Les amis dans le besoin peuvent s'y référer.
Préface
Dans l'article précédent nous avons découvert le mode adaptateur et le mode pont du mode structurel. Dans cet article, nous découvrirons le mode d'apparence et le mode décorateur du mode structurel.
Mode Façade
Introduction
Le mode Façade masque la complexité du système et fournit au client une interface à travers laquelle le client peut accéder au système . Ce type de modèle de conception est un modèle structurel qui ajoute une interface à un système existant pour masquer la complexité du système.
Pour faire simple, il fournit une interface simple avec le monde extérieur et cache la logique de mise en œuvre. Par exemple, avec le bouton d'alimentation d'un ordinateur couramment utilisé, il suffit d'appuyer sur le bouton d'alimentation pour le démarrer ou l'éteindre. Nous n'avons pas besoin de savoir comment il démarre (démarrage du CPU, démarrage de la mémoire, démarrage du disque dur). ) ou comment éteindre (éteindre le disque dur, éteindre la mémoire, éteindre le CPU
Ici, nous pouvons toujours utiliser l'exemple de jouer à des jeux sur un ordinateur pour mode apparence pour une explication simple. Il existe certains jeux en ligne sur l'ordinateur, notamment DNF, LOL et WOW. Il suffit de double-cliquer sur l'icône de l'ordinateur pour démarrer et jouer au jeu. Nous n'avons pas besoin de nous soucier de la façon dont le jeu démarre et. court.
- Établir l'interface du jeu
- Établir les classes de ; LOL, DNF et WOW Implémenter l'interface du jeu
- définir une classe d'apparence à appeler par le client.
- Appelez la classe d'apparence.
Exemple de code :
interface Game{ void play(); } class DNF implements Game{ @Override public void play() { System.out.println("正在玩DNF..."); } } class LOL implements Game{ @Override public void play() { System.out.println("正在玩LOL..."); } } class WOW implements Game{ @Override public void play() { System.out.println("正在玩WOW..."); } } class Computer{ private Game dnf; private Game lol; private Game wow; public Computer() { dnf=new DNF(); lol=new LOL(); wow=new WOW(); } public void playDNF(){ dnf.play(); } public void playLOL(){ lol.play(); } public void playWOW(){ wow.play(); } } public static void main(String[] args) { Computer computer=new Computer(); computer.playDNF(); computer.playLOL(); computer.playWOW(); }
Résultats d'exécution :
正在玩DNF... 正在玩LOL... 正在玩WOW...
Classe d'apparence et d'y appeler la méthode de jeu, sans nous soucier de la façon dont le jeu est démarré et exécuté. De plus, chaque jeu est indépendant les uns des autres et ne s’affecte pas les uns les autres. Puisqu’un jeu ne peut pas être joué, les autres jeux ne pourront pas s’exécuter. En fait, le mode d'apparence ressemble beaucoup à l'Interface que nous utilisons habituellement. Ils fournissent tous deux des interfaces avec le monde extérieur, et il n'est pas nécessaire de se soucier de la manière dont elles sont implémentées.
Avantages du mode apparence :
Réduit le couplage, ce qui, à certains égards, améliore également la sécurité.Inconvénients du mode d'apparence :
Ne respecte pas le principe d'ouverture et de fermeture et n'est pas facile à changer.Scénarios d'utilisation
Lorsqu'il existe plusieurs modules ou sous-systèmes complexes dans le système. Modèle DécorateurIntroduction
Le modèle Décorateur permet d'ajouter de nouvelles fonctionnalités à un objet existant sans modifier sa structure. Ce type de modèle de conception est un modèle structurel, qui agit comme un wrapper autour d’une classe existante. Le mode décorateur, comme son nom l'indique, consiste à décorer quelque chose afin qu'il puisse fournir des fonctions supplémentaires. Par exemple, décorer les gens et porter des costumes différents pour faire différentes choses. Par exemple, enfiler un maillot, c'est se préparer à jouer au ballon, enfiler un maillot de bain, c'est se préparer à aller nager, etc. Le modèle de décorateur peut ajouter dynamiquement des responsabilités supplémentaires à un objet. Ici, nous utilisons toujours un exemple pour illustrer.Parmi les modèles de jouets actuels, il existe deux modèles très populaires, le
modèle GUNDAM et le modèle MrGu Lorsque nous assemblons les modèles, généralement, le modèle est assemblé en premier, puis. quelques accessoires supplémentaires, tels que des armes, sont ajoutés. Nous avons ici assemblé le modèle GUNDAM et le modèle MrGu puis les avons équipés de leurs armes respectives.
- Créer une interface modèle de composants abstraits, avec la méthode d'assemblage ; >Créer des classes de composants spécifiques (classe GUNDAM et classe MrGu) et implémenter l'interface modèle ci-dessus
- définit un décorateur pour accepter la demande du client et répondre en fonction de la demande d'appel du client ; 🎜> définit une classe qui implémente spécifiquement la décoration, qui est utilisée pour ajouter les fonctions correspondantes à l'objet.
- Exemple de code :
Dans le code ci-dessus, si nous Si vous souhaitez simplement assembler un modèle Gundam ou Zaku, vous pouvez directement instancier la classe modèle et y appeler les méthodes. Si vous devez ajouter une arme lors de l'assemblage du modèle, il vous suffit d'ajouter la fonction correspondante via la classe décorateur.
Grâce à cet exemple, nous avons constaté qu'en essayant d'utiliser leinterface Model{ void assemble(); } class GUNDAM implements Model{ @Override public void assemble() { System.out.println("组装一个高达模型"); } } class MrGu implements Model{ @Override public void assemble() { System.out.println("组装一个扎古模型"); } } abstract class AddExtra implements Model{ protected Model model; public AddExtra(Model model){ this.model=model; } public void assemble(){ model.assemble(); } } class LightSaber extends AddExtra{ public LightSaber(Model model) { super(model); } public void assemble(){ model.assemble(); addLightSaber(); } public void addLightSaber(){ System.out.println("添加光剑"); } } class RocketLauncher extends AddExtra{ public RocketLauncher(Model model) { super(model); } public void assemble(){ model.assemble(); addRocketLauncher(); } public void addRocketLauncher(){ System.out.println("添加火箭筒"); } } public static void main(String[] args) { Model gundam=new GUNDAM(); Model mrgu=new MrGu(); gundam.assemble(); mrgu.assemble(); Model gModel=new LightSaber(new GUNDAM()); gModel.assemble(); Model mModel=new RocketLauncher(new MrGu()); mModel.assemble(); }
, certaines classes peuvent être étendues sans affecter les fonctions précédentes, améliorant ainsi la flexibilité.
组装一个高达模型 组装一个扎古模型 组装一个高达模型 添加光剑 组装一个扎古模型 添加火箭筒
Avantages du motif décorateur :
La classe de décoration et la classe décorée peuvent être développées indépendamment, avec un faible couplage, une expansion facile, une flexibilité et une commodité.
Inconvénients du motif décorateur :
Décorer trop une classe augmentera la complexité.
Scénarios d'utilisation
Lorsque le prototype reste inchangé et que certaines fonctions sont ajoutées dynamiquement.
Recommandations associées :
Mode constructeur et mode prototype dans les modèles de conception Java Introduction ( Exemple de code)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!

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)

Questions et réponses sur l'acquisition constante dans le débogage à distance Java Lors de l'utilisation de Java pour un débogage à distance, de nombreux développeurs peuvent rencontrer des phénomènes difficiles. Il...

Analyse de la raison pour laquelle le script Python ne peut être trouvé lors de la soumission d'un travail de pyflink sur le fil lorsque vous essayez de soumettre un travail de pyflink via le fil, vous pouvez rencontrer ...

Comment configurer dynamiquement les paramètres des annotations de classe d'entité en Java pendant le processus de développement, nous rencontrons souvent la nécessité de configurer dynamiquement les paramètres d'annotation en fonction de différents environnements ...

Confondu avec le choix des outils de gestion de projet Java pour les débutants. Pour ceux qui commencent tout juste à apprendre le développement backend, le choix des bons outils de gestion de projet est crucial ...

Analyse du comportement de chargement des classes du mécanisme SPI lorsque Tomcat charge les modules Spring-Web. Tomcat est utilisé pour découvrir et utiliser la servie fournie par Spring-Web lors du chargement des modules Spring-Web ...

La méthode non réactive du navigateur après le retour du serveur WebSocket 401. Lorsque vous utilisez Netty pour développer un serveur WebSocket, vous rencontrez souvent la nécessité de vérifier le jeton. � ...

L'exploration de l'application de la cohérence ultime dans les systèmes distribués Le traitement des transactions distribué a toujours été un problème dans l'architecture du système distribué. Pour résoudre le problème ...

Méthode Cancelacquire dans Javaaqs Code source: node.next = node; ...
