Adaptermønsteret i Java

1. Oversikt

I denne raske opplæringen vil vi se på adaptermønsteret og dets Java-implementering.

2. Adaptermønster

Et adaptermønster fungerer som en kontakt mellom to inkompatible grensesnitt som ellers ikke kan kobles direkte. En adapter bryter en eksisterende klasse med et nytt grensesnitt slik at den blir kompatibel med klientens grensesnitt.

Hovedmotivet bak å bruke dette mønsteret er å konvertere et eksisterende grensesnitt til et annet grensesnitt som klienten forventer. Det implementeres vanligvis når applikasjonen er designet.

2.1. Adaptermønstereksempel

Tenk på et scenario der det finnes en app som er utviklet i USA som gir den beste hastigheten på luksusbiler i miles per time (MPH). Nå må vi bruke den samme appen for vår klient i Storbritannia som ønsker de samme resultatene, men i kilometer i timen (km / t).

For å takle dette problemet, lager vi et adapter som konverterer verdiene og gir oss de ønskede resultatene:

Først oppretter vi det originale grensesnittet Flyttbar som skal returnere hastigheten til noen luksusbiler i miles i timen:

offentlig grensesnitt Movable {// returnerer hastighet i MPH dobbel getSpeed ​​(); }

Vi lager nå en konkret implementering av dette grensesnittet:

offentlig klasse BugattiVeyron implementerer bevegelig {@ Override offentlig dobbel getSpeed ​​() {retur 268; }}

Nå oppretter vi et adaptergrensesnitt Bevegelig adapter som vil være basert på det samme Flyttbar klasse. Det kan endres litt for å gi forskjellige resultater i forskjellige scenarier:

offentlig grensesnitt MovableAdapter {// returnerer hastighet i KM / H dobbel getSpeed ​​(); } 

Implementeringen av dette grensesnittet vil bestå av privat metode konverterMPHtoKMPH () som skal brukes til konverteringen:

offentlig klasse MovableAdapterImpl implementerer MovableAdapter {private Movable luxuryCars; // standardkonstruktører @ Override offentlig dobbel getSpeed ​​() {return convertMPHtoKMPH (luxuryCars.getSpeed ​​()); } privat dobbel konverteringMPHtoKMPH (dobbel mph) {retur mph * 1.60934; }}

Nå bruker vi bare metodene som er definert i adapteren vår, og vi får de konverterte hastighetene. I dette tilfellet vil følgende påstand være sant:

@Test offentlig ugyldig nårConvertingMPHToKMPH_thenSuccessfullyConverted () {Movable bugattiVeyron = new BugattiVeyron (); MovableAdapter bugattiVeyronAdapter = ny MovableAdapterImpl (bugattiVeyron); assertEquals (bugattiVeyronAdapter.getSpeed ​​(), 431.30312, 0.00001); }

Som vi kan legge merke til her, konverterer adapteren vår 268 km / t til 431 km / t for akkurat denne saken.

2.2. Når skal du bruke adaptermønster

  • Når en ekstern komponent gir fengende funksjonalitet som vi vil bruke på nytt, men den er uforenlig med vår nåværende applikasjon. En passende adapter kan utvikles for å gjøre dem kompatible med hverandre
  • Når søknaden vår ikke er kompatibel med grensesnittet som klienten forventer
  • Når vi ønsker å gjenbruke eldre koder i applikasjonen vår uten å gjøre noen endringer i den opprinnelige koden

3. Konklusjon

I denne artikkelen så vi på adapterdesignmønsteret i Java.

Hele kildekoden for dette eksemplet er tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found