Maison  >  Article  >  Java  >  Modèles de conception Java : analyse d'exemples de modèles d'apparence

Modèles de conception Java : analyse d'exemples de modèles d'apparence

WBOY
WBOYavant
2023-04-20 15:49:08981parcourir

Introduction au mode

  • Mode Façade, également appelé "Mode Processus : le mode Façade fournit une interface cohérente pour un ensemble d'interfaces dans le sous-système. Ce mode définit une interface de haut niveau, ce qui rend ce sous-système plus facile à utiliser

  • Le mode d'apparition est utilisé pour

    protéger les détails du sous-système interne en définissant une interface cohérente, de sorte que l'appelant n'a qu'à appeler cette interface sans se soucier des détails internes de ce sous-système . Diagramme de classes UML

Analyse du diagramme de classes : Modèles de conception Java : analyse dexemples de modèles dapparence

Façade
     : Fournit une interface d'appel unifiée pour l'appelant. La classe d'apparence sait quels sous-systèmes sont responsables du traitement de la demande, afin que l'appelant. La requête est transmise par proxy à l'objet sous-système approprié.
  • Client
  • : L'appelant de l'interface d'apparence
  • Collection SubSystem
  • : Fait référence au module ou au sous-système qui gère les tâches assignées par l'objet Facade. C'est le véritable fournisseur de la fonction.
  • Cas du mode d'apparition :

Introduction au contexte :

Construire un home cinéma : lecteur DVD, projecteur, écran automatique, son surround, machine à pop-corn, nécessaire pour terminer la fonction. fonctions d'utilisation du home cinéma, via Contrôle directement avec la télécommande (en coordonnant les interrupteurs de chaque appareil), le processus est le suivant :

Allumez la machine à pop-corn

  • Posez l'écran

  • Allumez le projecteur

  • Allumez la chaîne stéréo

  • Allumez le DVD, choisissez DVD

  • get popcorn

  • tamisez les lumières

  • play

  • Après je regarde le film, éteint divers appareils.

DVD, P opcorn, Les codes pour le projecteur, l'écran, la stéréo et le TheaterLight sont les suivants :

public class DVDPlayer {
    // 使用单例模式
    private static  final DVDPlayer instance = new DVDPlayer();
    private DVDPlayer() {}
    public static DVDPlayer getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("dvd 打开了...");
    }
    public void off() {
        System.out.println("dvd 关闭了...");
    }
    public void play() {
        System.out.println("dvd 播放中...");
    }
    public void pause() {
        System.out.println("dvd 暂停了...");
    }
}
public class Popcorn {
    private static final Popcorn instance = new Popcorn();
    private Popcorn(){}
    public static Popcorn getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("爆米花机打开了...");
    }
    public void off() {
        System.out.println("爆米花机关闭了...");
    }
    public void pop() {
        System.out.println("爆米花做好了...");
    }
}
public class Projector {
    private static final Projector instance = new Projector();
    private Projector(){}
    public static Projector getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("投影仪打开了...");
    }
    public void off() {
        System.out.println("投影仪关闭了...");
    }
    public void focus() {
        System.out.println("投影仪聚焦中...");
    }
}
public class Screen {
    private static final Screen instance = new Screen();
    private Screen(){}
    public static Screen getInstance() {
        return instance;
    }
    public void up() {
        System.out.println("屏幕上升...");
    }
    public void down() {
        System.out.println("屏幕下降...");
    }
}
public class Stereo {
    private static final Stereo instance = new Stereo();
    private Stereo(){}
    public static Stereo getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("立体音响打开...");
    }
    public void off() {
        System.out.println("立体音响关闭...");
    }
    public void up() {
        System.out.println("立体音响音量+...");
    }
    public void down() {
        System.out.println("立体音响音量-...");
    }
}
public class TheaterLight {
    private static final TheaterLight instance = new TheaterLight();
    private TheaterLight(){}
    public static TheaterLight getInstance() {
        return instance;
    }

    public void on() {
        System.out.println("灯光打开...");
    }
    public void off() {
        System.out.println("灯光关闭...");
    }
    public void dim() {
        System.out.println("灯光亮度调暗...");
    }
    public void bright() {
        System.out.println("灯光亮度调亮...");
    }
}
Modèles de conception Java : analyse dexemples de modèles dapparenceHomeTheaterFacade (coordonne les interrupteurs de chaque appareil)

public class HomeTheaterFacade {
    private DVDPlayer dvdPlayer;
    private Popcorn popcorn;
    private Projector projector;
    private Stereo stereo;
    private Screen screen;
    private TheaterLight theaterLight;
    public HomeTheaterFacade() {
        this.dvdPlayer = DVDPlayer.getInstance();
        this.popcorn = Popcorn.getInstance();
        this.projector = Projector.getInstance();
        this.stereo = Stereo.getInstance();
        this.screen = Screen.getInstance();
        this.theaterLight = TheaterLight.getInstance();
    }

    /**
     * 准备开始
     */
    public void ready() {
        popcorn.on();
        popcorn.pop();
        screen.down();
        projector.on();
        projector.focus();
        stereo.on();
        dvdPlayer.on();
        theaterLight.dim();
    }

    /**
     * 播放
     */
    public void play() {
        dvdPlayer.play();
    }

    /**
     * 暂停
     */
    public void pause() {
        dvdPlayer.pause();
    }

    /**
     * 结束
     */
    public void end() {
        popcorn.off();
        theaterLight.bright();
        screen.up();
        projector.off();
        stereo.off();
        dvdPlayer.off();
    }
}

Client (test)DVD、Popcorn、Projector、Screen、Stereo、TheaterLight代码如下:

public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
        System.out.println("----------准备开始-----------");
        homeTheaterFacade.ready();
        System.out.println("----------开始播放-----------");
        homeTheaterFacade.play();
        System.out.println("----------播放暂停-----------");
        homeTheaterFacade.pause();
        System.out.println("----------播放结束-----------");
        homeTheaterFacade.end();
    }
}
rrreeerrreeerrreeerrreeerrreee

HomeTheaterFacade(统筹各设备开关)

rrreee

Client(测试)rrreee

Résultats de mise en œuvre :

Modèles de conception Java : analyse dexemples de modèles dapparence

Notes et détails du mode d'apparence

  • Le mode d'apparence

    protège les détails de le sous-système de l'extérieur , le mode apparence réduit donc la complexité de l'utilisation du sous-système par le client

  • Le mode apparence découple la relation de couplage entre le client et le sous-système, rendant les modules du sous-système plus faciles à maintenir et à développer. . En utilisant le mode d'apparence de manière appropriée, cela peut nous aider à mieux

    diviser les niveaux d'accès

  • Lorsque le système doit être conçu de manière superposée, vous pouvez envisager d'utiliser le motif Façade

  • Lors de la maintenance. un grand système existant, il est peut-être devenu très difficile à maintenir et à développer. À l'heure actuelle, vous pouvez envisager de l'utiliser comme nouveau système. Développez une classe Facade pour fournir une interface plus claire et plus simple pour le système existant, permettant ainsi le nouveau système. pour interagir avec la classe Facade et améliorer la réutilisabilité.
  • N'utilisez pas trop ou de manière déraisonnable le mode apparence. Il est préférable d'appeler le module directement. Le but est de hiérarchiser le système et de faciliter la maintenance.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer