Façade (patron de conception)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Ce modèle est-il pertinent ? Cliquez pour en voir d'autres.
Cet article ne cite pas suffisamment ses sources (octobre 2014).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références » (modifier l'article, comment ajouter mes sources ?).

Ce modèle est-il pertinent ? Cliquez pour en voir d'autres.
Cet article ou cette section peut contenir un travail inédit ou des déclarations non vérifiées (indiquez la date de pose grâce au paramètre date).

Vous pouvez aider en ajoutant des références. Voir la page de discussion pour plus de détails.

image illustrant l’informatique
Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Page d'aide sur l'homonymie Pour les articles homonymes, voir Façade (homonymie).

En génie logiciel, le patron de conception (ou design pattern) façade a pour but de cacher une conception et une interface complexe difficile à comprendre (cette complexité étant apparue « naturellement » avec l'évolution du sous-système en question).

Objectif[modifier | modifier le code]

La façade permet de simplifier cette complexité en fournissant une interface simple du sous-système. Habituellement, la façade est réalisée en réduisant les fonctionnalités de ce dernier, mais en fournissant toutes les fonctions nécessaires à la plupart des utilisateurs.

La façade encapsule la complexité des interactions entre les objets métier participant à un workflow.

Une façade peut être utilisée pour :

  • rendre une bibliothèque plus facile à utiliser, comprendre et tester;
  • rendre une bibliothèque plus lisible;
  • réduire les dépendances entre les clients de la bibliothèque et le fonctionnement interne de celle-ci, ainsi on gagne en flexibilité pour les évolutions futures du système;
  • assainir une API que l'on ne peut pas modifier si celle-ci est mal conçue, ou mieux découper ses fonctionnalités si celle-ci n'est pas assez claire.

Un adaptateur est utilisé lorsque l'on doit respecter une interface bien définie. La façade est utilisée pour simplifier l'utilisation de l'API.

Structure[modifier | modifier le code]

FacadeDesignPattern.png

Façade
La façade fait abstraction des packages 1, 2 et 3 du reste de l'application.
Clients
Les objets utilisant le patron de conception Façade pour accéder aux ressources abstraites.

Exemple[modifier | modifier le code]

Java[modifier | modifier le code]

L'exemple suivant cache une API de gestion de calendrier compliquée, derrière une façade plus simple. Il affiche :

Date: 1980-08-20
20 jours après : 1980-09-09
 import java.util.*;
 
 // Façade 
 class UserfriendlyDate {
     GregorianCalendar gcal;
      
     public UserfriendlyDate(String isodate_ymd) {
         String[] a = isodate_ymd.split("-");
         gcal = new GregorianCalendar(Integer.parseInt(a[0]),
               Integer.parseInt(a[1])-1 /* !!! */, Integer.parseInt(a[2]));
     }

     public void addDays(int days) { 
       gcal.add(Calendar.DAY_OF_MONTH, days); 
     }
     
     public String toString() { 
       return String.format("%1$tY-%1$tm-%1$td", gcal);
     }
 }
 
 // Client 
 class FacadePattern {
     public static void main(String[] args) {  
         UserfriendlyDate d = new UserfriendlyDate("1980-08-20");   
         System.out.println("Date : "+d);   
         d.addDays(20);   
         System.out.println("20 jours après : "+d);
     }
 }