Table des matières
Préface
Mode Façade
Maison Java javaDidacticiel Introduction au modèle d'apparence et au modèle de décorateur dans les modèles de conception Java (exemple de code)

Introduction au modèle d'apparence et au modèle de décorateur dans les modèles de conception Java (exemple de code)

Sep 12, 2018 pm 04:06 PM
外观模式 装饰器模式

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.

Les étapes à mettre en œuvre sont les suivantes :

  1. Établir l'interface du jeu

  2. Établir les classes de ; LOL, DNF et WOW Implémenter l'interface du jeu

  3. définir une classe d'apparence à appeler par le client.

  4. 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();
    }
Copier après la connexion

Résultats d'exécution :

    正在玩DNF...
    正在玩LOL...
    正在玩WOW...
Copier après la connexion
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écorateur

Introduction

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.

Les étapes spécifiques de mise en œuvre sont les suivantes :

  1. 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

  2. définit un décorateur pour accepter la demande du client et répondre en fonction de la demande d'appel du client ; 🎜>

  3. définit une classe qui implémente spécifiquement la décoration, qui est utilisée pour ajouter les fonctions correspondantes à l'objet.
  4. Exemple de code :

Exécuter le résultat :

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 le
interface 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();
}
Copier après la connexion
mode décorateur

, certaines classes peuvent être étendues sans affecter les fonctions précédentes, améliorant ainsi la flexibilité.

    组装一个高达模型
    组装一个扎古模型
    
    组装一个高达模型
    添加光剑
    组装一个扎古模型
    添加火箭筒
Copier après la connexion

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 :

Introduction au mode adaptateur et au mode pont dans les modèles de conception Java (exemples de code)

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Dans le débogage à distance Java, comment obtenir correctement des valeurs constantes sur les serveurs distants? Dans le débogage à distance Java, comment obtenir correctement des valeurs constantes sur les serveurs distants? Apr 19, 2025 pm 01:54 PM

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...

Pourquoi signale-t-il une erreur lors de la soumission d'un travail de pyflink sur le fil? Pourquoi signale-t-il une erreur lors de la soumission d'un travail de pyflink sur le fil? Apr 19, 2025 pm 02:06 PM

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 modifier dynamiquement le paramètre SavePath de @Excel Annotation dans Easypoi lorsque le projet commence en Java? Comment modifier dynamiquement le paramètre SavePath de @Excel Annotation dans Easypoi lorsque le projet commence en Java? Apr 19, 2025 pm 02:09 PM

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 ...

Comment choisir des outils de gestion de projet Java lors de l'apprentissage du développement back-end? Comment choisir des outils de gestion de projet Java lors de l'apprentissage du développement back-end? Apr 19, 2025 pm 02:15 PM

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 ...

Lorsque Tomcat charge les modules de Spring-Web, le mécanisme SPI détruit-il vraiment le principe de visibilité des chargeurs de classe Java? Lorsque Tomcat charge les modules de Spring-Web, le mécanisme SPI détruit-il vraiment le principe de visibilité des chargeurs de classe Java? Apr 19, 2025 pm 02:18 PM

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 ...

Quelle est la raison pour laquelle le navigateur ne répond pas après le retour du serveur WebSocket 401? Comment le résoudre? Quelle est la raison pour laquelle le navigateur ne répond pas après le retour du serveur WebSocket 401? Comment le résoudre? Apr 19, 2025 pm 02:21 PM

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. � ...

Cohérence ultime dans les systèmes distribués: comment s'appliquer et comment compenser les incohérences des données? Cohérence ultime dans les systèmes distribués: comment s'appliquer et comment compenser les incohérences des données? Apr 19, 2025 pm 02:24 PM

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 ...

Comment node.next = node; Dans Java AQS, le code source Aide à la collecte des ordures? Comment node.next = node; Dans Java AQS, le code source Aide à la collecte des ordures? Apr 19, 2025 pm 02:27 PM

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

See all articles