Maison  >  Article  >  Java  >  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)

不言
不言original
2018-09-12 16:06:231977parcourir

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();
    }

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é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();
}
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 :

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