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.
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.
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.
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...Dans le ci-dessus Dans l'exemple de code, lorsque nous voulons jouer à un jeu, il nous suffit d'instancier la
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.
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(); }mode décorateur
, 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!