Patron de conception Façade

Le patron Façade masque la complexité du système et fournit une interface par laquelle les clients peuvent accéder au système. Ce type de patron de conception appartient aux patrons structurels, et il ajoute une interface à un système existant pour masquer sa complexité.

Ce patron implique une seule classe qui fournit des méthodes simplifiées pour les requêtes des clients et délègue les appels aux méthodes des classes existantes du système.

Introduction

intention

Fournir une interface de haut niveau cohérente pour un sous-système complexe. Ainsi, le code client peut interagir avec le sous-système via cette interface simplifiée sans avoir besoin de comprendre la complexité interne du sous-système.

Principaux problèmes résolus

  • Réduire le couplage entre les clients et les sous-systèmes complexes.
  • Simplifier les opérations des clients sur des systèmes complexes et masquer les détails d'implémentation internes.

Cas d'utilisation

  • Lorsque les clients n'ont pas besoin de comprendre la logique interne complexe et les interactions entre composants du système.
  • Lorsqu'un point d'entrée clair doit être défini pour l'ensemble du système.

Approche d'implémentation

  • Créer une classe de façadeDéfinir une classe (Facade) comme intermédiaire entre les clients et les sous-systèmes.
  • Encapsuler les opérations du sous-systèmeLa classe Facade encapsule des opérations complexes du sous-système dans des méthodes simples.

Code clé

  • Classe FacadeFournir une interface de haut niveau pour simplifier l'interaction entre les clients et les sous-systèmes.
  • Classe de sous-systèmeImplémenter une logique métier spécifique, qui est appelée par la classe Facade.

Exemple d'application

  1. Réception d'hôpitalLe réceptionniste d'hôpital simplifie des processus complexes tels que l'enregistrement, la consultation externe, la tarification et la délivrance de médicaments.
  2. Architecture Java à trois niveauxGrâce au patron de conception Facade, l'accès à la couche de présentation, à la couche de logique métier et à la couche d'accès aux données peut être simplifié.

Avantages

  1. Réduire les dépendancesLes dépendances entre les clients et les sous-systèmes sont réduites.
  2. Améliorer la flexibilitéLes modifications internes du sous-système n'affectent pas les clients.
  3. Renforcer la sécuritéMasque l'implémentation interne du sous-système et n'expose que les opérations nécessaires.

Inconvénients

  • Enfreint le principe ouvert/ferméLes modifications du sous-système peuvent nécessiter des modifications correspondantes de la classe Façade.

Suggestions d'utilisation

  • Utilisez le patron Façade lorsque vous avez besoin de simplifier l'accès à un système complexe.
  • Assurez-vous que les méthodes fournies par la classe Façade sont suffisamment simples pour que les clients puissent les utiliser.

Notes

  • Le patron Façade convient aux structures en couches et peut fournir un point d'entrée clair pour chaque couche.
  • Évitez d'abuser du patron Façade afin d'éviter de masquer trop de détails, ce qui pourrait entraîner des difficultés de maintenance.

Structure

Le patron Façade comporte les rôles principaux suivants :

  • Façade :

    • Fournir une interface simplifiée qui encapsule la complexité du système. Les clients du patron Façade interagissent avec l'objet façade sans avoir à interagir directement avec les différents composants du système.
  • Sous-système :

    • Composé de plusieurs classes interdépendantes, responsable des fonctions spécifiques du système. L'objet façade répond aux requêtes des clients en appelant ces sous-systèmes.
  • Client :

    • Utilisez l'objet façade pour interagir avec le système sans avoir besoin de comprendre l'implémentation interne spécifique du système.

Implémentation

Nous allons créer uneShapeinterface et une implémentationShapeclasse d'entité de l'interface. L'étape suivante consiste à définir une classe façade.ShapeMaker。

ShapeMakerLa classe utilise des classes d'entité pour représenter les appels utilisateur à ces classes.FacadePatternDemoLa classe utiliseShapeMakerclasse pour afficher le résultat.

外观模式的 UML 图

Étape 1

Créer une interface.

Shape.java

public interface Shape { void draw(); }

Étape 2

Créez une classe d'entité qui implémente l'interface.

Rectangle.java

public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }

Square.java

public class Square implements Shape { @Override public void draw() { System.out.println("Square::draw()"); } }

Circle.java

public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }

Étape 3

Créer une classe façade.

ShapeMaker.java

public class ShapeMaker { private Shape circle; private Shape rectangle; private Shape square; public ShapeMaker() { circle = new Circle(); rectangle = new Rectangle(); square = new Square(); } public void drawCircle(){ circle.draw(); } public void drawRectangle(){ rectangle.draw(); } public void drawSquare(){ square.draw(); } }

Étape 4

Utilisez la classe façade pour dessiner différents types de formes.

FacadePatternDemo.java

public class FacadePatternDemo { public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }

Étape 5

Exécutez le programme, le résultat s'affiche :

Circle::draw()
Rectangle::draw()
Square::draw()
autres extensions