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