Le modèle d'adaptateur en Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous examinerons le modèle d'adaptateur et son implémentation Java.

2. Modèle d'adaptateur

Un modèle d'adaptateur agit comme un connecteur entre deux interfaces incompatibles qui autrement ne peuvent pas être connectées directement. Un adaptateur encapsule une classe existante avec une nouvelle interface afin qu'elle devienne compatible avec l'interface du client.

Le motif principal derrière l'utilisation de ce modèle est de convertir une interface existante en une autre interface attendue par le client. Il est généralement mis en œuvre une fois l'application conçue.

2.1. Exemple de modèle d'adaptateur

Prenons un scénario dans lequel il existe une application développée aux États-Unis qui renvoie la vitesse maximale des voitures de luxe en miles par heure (MPH). Nous devons maintenant utiliser la même application pour notre client au Royaume-Uni qui souhaite les mêmes résultats mais en kilomètres par heure (km / h).

Pour résoudre ce problème, nous allons créer un adaptateur qui convertira les valeurs et nous donnera les résultats souhaités:

Tout d'abord, nous allons créer l'interface originale Movable qui est censée renvoyer la vitesse de certaines voitures de luxe en miles par heure:

public interface Movable { // returns speed in MPH double getSpeed(); }

Nous allons maintenant créer une implémentation concrète de cette interface:

public class BugattiVeyron implements Movable { @Override public double getSpeed() { return 268; } }

Nous allons maintenant créer une interface d'adaptateur MovableAdapter qui sera basée sur la même classe Movable . Il peut être légèrement modifié pour donner des résultats différents dans différents scénarios:

public interface MovableAdapter { // returns speed in KM/H double getSpeed(); } 

L'implémentation de cette interface consistera en la méthode privée convertMPHtoKMPH () qui sera utilisée pour la conversion:

public class MovableAdapterImpl implements MovableAdapter { private Movable luxuryCars; // standard constructors @Override public double getSpeed() { return convertMPHtoKMPH(luxuryCars.getSpeed()); } private double convertMPHtoKMPH(double mph) { return mph * 1.60934; } }

Maintenant, nous n'utiliserons que les méthodes définies dans notre adaptateur et nous obtiendrons les vitesses converties. Dans ce cas, l'assertion suivante sera vraie:

@Test public void whenConvertingMPHToKMPH_thenSuccessfullyConverted() { Movable bugattiVeyron = new BugattiVeyron(); MovableAdapter bugattiVeyronAdapter = new MovableAdapterImpl(bugattiVeyron); assertEquals(bugattiVeyronAdapter.getSpeed(), 431.30312, 0.00001); }

Comme nous pouvons le constater ici, notre adaptateur convertit 268 mph en 431 km / h pour ce cas particulier.

2.2. Quand utiliser le modèle d'adaptateur

  • Lorsqu'un composant extérieur fournit des fonctionnalités captivantes que nous aimerions réutiliser, mais qui sont incompatibles avec notre application actuelle . Un adaptateur approprié peut être développé pour les rendre compatibles les uns avec les autres
  • Lorsque notre application n'est pas compatible avec l'interface attendue par notre client
  • Lorsque nous voulons réutiliser du code hérité dans notre application sans apporter de modification au code d'origine

3. Conclusion

Dans cet article, nous avons examiné le modèle de conception d'adaptateur en Java.

Le code source complet de cet exemple est disponible à l'adresse over sur GitHub.