Het adapterpatroon in Java

1. Overzicht

In deze korte tutorial zullen we het adapterpatroon en de Java-implementatie ervan bekijken.

2. Adapterpatroon

Een adapterpatroon fungeert als een connector tussen twee incompatibele interfaces die anders niet rechtstreeks kunnen worden aangesloten. Een adapter omhult een bestaande klasse met een nieuwe interface zodat deze compatibel wordt met de interface van de client.

Het belangrijkste motief achter het gebruik van dit patroon is om een ​​bestaande interface om te zetten in een andere interface die de klant verwacht. Het wordt meestal geïmplementeerd zodra de applicatie is ontworpen.

2.1. Adapterpatroon Voorbeeld

Overweeg een scenario waarin er een app is die in de VS is ontwikkeld en die de topsnelheid van luxe auto's in mijlen per uur (MPH) retourneert. Nu moeten we dezelfde app gebruiken voor onze klant in het VK die dezelfde resultaten wil, maar in kilometers per uur (km / h).

Om dit probleem op te lossen, maken we een adapter die de waarden converteert en ons de gewenste resultaten geeft:

Eerst maken we de originele interface Verplaatsbaar die de snelheid van sommige luxe auto's in mijlen per uur zou moeten weergeven:

openbare interface Movable {// retourneert snelheid in MPH double getSpeed ​​(); }

We gaan nu een concrete implementatie van deze interface maken:

openbare klasse BugattiVeyron implementeert Movable {@Override public double getSpeed ​​() {return 268; }}

Nu gaan we een adapterinterface maken Beweegbare adapter dat zal op hetzelfde gebaseerd zijn Verplaatsbaar klasse. Het kan enigszins worden aangepast om verschillende resultaten in verschillende scenario's te verkrijgen:

openbare interface MovableAdapter {// retourneert snelheid in KM / H double getSpeed ​​(); } 

De implementatie van deze interface zal bestaan ​​uit een privémethode convertMPHtoKMPH () die zal worden gebruikt voor de conversie:

openbare klasse MovableAdapterImpl implementeert MovableAdapter {privé Movable luxuryCars; // standard constructors @Override public double getSpeed ​​() {return convertMPHtoKMPH (luxuryCars.getSpeed ​​()); } private double convertMPHtoKMPH (double mph) {return mph * 1.60934; }}

Nu gebruiken we alleen de methoden die in onze adapter zijn gedefinieerd, en we krijgen de geconverteerde snelheden. In dit geval is de volgende bewering waar:

@Test openbare leegte whenConvertingMPHToKMPH_thenSuccessfullyConverted () {Verplaatsbare bugattiVeyron = nieuwe BugattiVeyron (); MovableAdapter bugattiVeyronAdapter = nieuwe MovableAdapterImpl (bugattiVeyron); assertEquals (bugattiVeyronAdapter.getSpeed ​​(), 431.30312, 0.00001); }

Zoals we hier kunnen zien, converteert onze adapter 268 mijl / u naar 431 km / u voor dit specifieke geval.

2.2. Wanneer adapterpatroon gebruiken

  • Wanneer een externe component boeiende functionaliteit biedt die we willen hergebruiken, maar deze niet compatibel is met onze huidige applicatie. Er kan een geschikte adapter worden ontwikkeld om ze compatibel te maken met elkaar
  • Wanneer onze applicatie niet compatibel is met de interface die onze klant verwacht
  • Wanneer we oude code in onze applicatie willen hergebruiken zonder enige wijziging in de originele code

3. Conclusie

In dit artikel hebben we het ontwerppatroon van de adapter in Java bekeken.

De volledige broncode voor dit voorbeeld is beschikbaar op GitHub.