Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Design Patterns en Java
  3. Le pattern Facade
Extrait - Design Patterns en Java Descriptions et solutions illustrées en UML 2 et Java (5e édition) - Les 23 modèles de conception
Extraits du livre
Design Patterns en Java Descriptions et solutions illustrées en UML 2 et Java (5e édition) - Les 23 modèles de conception
1 avis
Revenir à la page d'achat du livre

Le pattern Facade

Description

L’objectif du pattern Facade est de regrouper les interfaces d’un ensemble d’objets en une interface unifiée rendant cet ensemble plus simple à utiliser pour un client.

Le pattern Facade encapsule l’interface de chaque objet considérée comme interface de bas niveau dans une interface unique de niveau plus élevé. La construction de l’interface unifiée peut nécessiter d’implanter des méthodes destinées à composer les interfaces de bas niveau.

Exemple

Nous voulons offrir la possibilité d’accéder au système de vente de véhicule en tant que service web. Le système est architecturé sous la forme d’un ensemble de composants possédant leur propre interface comme :

  • le composant Catalogue ;

  • le composant GestionDocument ;

  • le composant RepriseVéhicule.

Il est possible de donner l’accès à l’ensemble de l’interface de ces composants aux clients du service web mais cette démarche présente deux inconvénients majeurs :

  • Certaines fonctionnalités ne sont pas utiles aux clients du service web comme les fonctionnalités d’affichage du catalogue.

  • L’architecture interne du système répond à des exigences de modularité et d’évolution qui ne font pas partie des besoins des clients du service web pour lesquels ces exigences engendrent une complexité inutile.

Le pattern Facade résout ce problème en proposant l’écriture d’une interface unifiée plus simple et d’un plus haut niveau d’abstraction. Une classe est chargée d’implanter cette interface unifiée en utilisant les composants du système.

Cette solution est illustrée à la figure 3-6.1. La classe WebServiceAuto offre une interface aux clients du service web. Cette classe et son interface...

Structure

1. Diagramme de classes

La figure 3-6.2 détaille la structure générique du pattern.

images/fig417.PNG

Figure 3-6.2 - Structure du pattern Facade

2. Participants

Les participants au pattern sont les suivants :

  • Façade (WebServiceAuto) et son interface constituent la partie abstraite exposée aux clients du système. Cette classe possède des références vers les classes et composants constituant le système et dont les méthodes sont utilisées par la façade pour implanter l’interface unifiée.

  • Les classes et composants du système (RepriseVéhicule, Gestion-Document et Catalogue) implantent les fonctionnalités du système et répondent aux requêtes de la façade. Elles n’ont pas besoin de la façade pour travailler.

3. Collaborations

Les clients communiquent avec le système au travers de la façade qui se charge, à son tour, d’invoquer les classes et composants du système. La façade ne peut pas se limiter à transmettre des invocations. Elle doit aussi réaliser l’adaptation entre son interface et l’interface des objets du système au moyen de code spécifique. Le diagramme de séquence de la figure 3-6.3 illustre cette adaptation sur un exemple où du code spécifique à la façade doit être invoqué (méthodes...

Domaines d’application

Le pattern est utilisé dans les cas suivants :

  • Pour fournir une interface simple d’un système complexe. L’architecture d’un système peut être basée sur de nombreuses petites classes, lui offrant une bonne modularité et des capacités d’évolution. Cependant ces bonnes propriétés du système n’intéressent pas ses clients qui ont besoin d’un accès simple qui répond à leurs exigences.

  • Pour diviser un système en sous-systèmes, la communication entre sous-systèmes étant mise en œuvre de façon abstraite de leur implantation grâce aux façades.

  • Pour systématiser l’encapsulation de l’implantation d’un système vis-à-vis de l’extérieur.

Exemple en Java

Nous reprenons l’exemple du service web que nous allons simuler à l’aide d’un petit programme Java. Nous donnons d’abord le code source des composants du système et pour commencer celui de la classe ComposantCatalogue et de son interface Catalogue.

La base de données constituant le catalogue est remplacée par un simple tableau d’objets. La méthode retrouveVehicules effectue la recherche d’un ou de plusieurs véhicules en fonction de leur prix à l’aide d’une simple boucle.

import java.util.*; 
public interface Catalogue 
{ 
  List<String> retrouveVehicules(int prixMin, int 
    prixMax); 
} 
 
import java.util.*; 
public class ComposantCatalogue implements Catalogue 
{ 
  protected Object[] descriptionsVehicule =  
  { 
    "Berline 5 portes", 6000, "Compact 3 portes", 4000,  
    "Espace 5 portes", 8000, "Break 5 portes", 7000,  
    "Coupé 2 portes", 9000, "Utilitaire 3 portes", 5000 
  }; 
 
  public List<String> retrouveVehicules(int prixMin, 
    int prixMax) 
  { 
    int index...