Adaptateur (patron de conception)
# Adaptateur (patron de conception)

En génie logiciel, adaptateur (ou wrapper) est un patron de conception (design pattern) de type structure (structural). Il permet de convertir l'interface d'une classe en une autre interface que le client attend.

L’adaptateur fait fonctionner ensemble des classes qui n'auraient pas pu fonctionner sans lui, à cause d'une incompatibilité d'interfaces.

## Applicabilité

Il permet d'intégrer une classe à ne pas modifier, par exemple :

* une API tiers convient au besoin fonctionnel, mais la signature de ses méthodes ne convient pas ;
* l'utilisation d'anciennes classes doit être normalisée, sans pour autant en reprendre tout le code.

Un objet adaptateur sert de liaison entre les objets manipulés et un programme les utilisant, permettant la communication entre classes. Il est utilisé pour convertir l'interface d'un objet vers une autre interface, attendue par le client pour utiliser l'objet en question.

## Structure

* IEmployee : définit l'interface métier utilisée par le employee.
* employee : travaille avec des objets utilisant l'interface IEmployee.
* EmployeeManager : définit une interface existante devant être adaptée.
* employeeAdapter : fait correspondre l'interface de Adapté à l'interface IEmployee.

## Mise en œuvre

### Exemple en C++

Un adaptateur pour faire un carré aux coins ronds. Le code est en C++.

### Exemple en C♯

En C♯ :

### Exemple en PHP

Exemple d'un adaptateur permettant d'obtenir la description d'un véhicule en PHP :

## Utilisations connues

On peut également utiliser un adaptateur lorsque l'on ne veut pas développer toutes les méthodes d'une certaine interface. Par exemple, si l'on doit développer l'interface MouseListener en Java, mais que l'on ne souhaite pas développer de comportement pour toutes les méthodes, on peut dériver la classe MouseAdapter. Celle-ci fournit en effet un comportement par défaut (vide) pour toutes les méthodes de MouseListener.

Exemple avec le MouseAdapter :

Exemple avec le MouseListener :

