Az adapterminta Java-ban

1. Áttekintés

Ebben a gyors bemutatóban áttekintjük az Adapter mintát és annak Java megvalósítását.

2. Adapterminta

Az adapterminta összekötőként működik két inkompatibilis interfész között, amelyeket egyébként nem lehet közvetlenül csatlakoztatni. Az Adapter egy meglévő osztályt új interfésszel burkol, hogy az kompatibilis legyen az ügyfél felületével.

A minta használatának fő motívuma egy meglévő interfész átalakítása egy másik interfésszé, amelyre az ügyfél számít. Általában az alkalmazás megtervezése után valósul meg.

2.1. Adapterminta példa

Vegyünk egy forgatókönyvet, amelyben van egy olyan alkalmazás, amelyet az USA-ban fejlesztettek ki, és amely luxusautók maximális sebességét mérföld / óra (MPH) értékkel adja vissza. Most ugyanazt az alkalmazást kell használnunk az Egyesült Királyságbeli ügyfelünk számára, amely ugyanazt az eredményt akarja, de kilométer per óra (km / h).

A probléma megoldása érdekében létrehozunk egy adaptert, amely átalakítja az értékeket és megadja a kívánt eredményeket:

Először létrehozzuk az eredeti felületet Mozgatható amely állítólag néhány luxusautó sebességét mérföld / órában adja vissza:

public interface Movable {// sebességet ad vissza MPH double getSpeed ​​() -ben; }

Most létrehozunk egy konkrét megvalósítást ennek a felületnek:

nyilvános osztályú BugattiVeyron megvalósítja a Movable {@Override public double getSpeed ​​() {return 268; }}

Most létrehozunk egy adapter interfészt MovableAdapter hogy ugyanazon fog alapulni Mozgatható osztály. Lehet, hogy kissé módosítottuk, hogy különböző szituációkban különböző eredményeket kapjunk:

nyilvános felület MovableAdapter {// sebességet ad vissza KM / H dupla getSpeed ​​() -ben; } 

Ennek az interfésznek a megvalósítása privát módszerből áll convertMPHtoKMPH () amelyet az átalakításhoz használnak:

public class MovableAdapterImpl megvalósítja MovableAdapter {private Movable luxuryCars; // szabványos kivitelezők @Orride public double getSpeed ​​() {return convertMPHtoKMPH (luxuryCars.getSpeed ​​()); } privát kettős konvertálásMPHtoKMPH (dupla mph) {return mph * 1,60934; }}

Most csak az adapterünkben meghatározott módszereket fogjuk használni, és megkapjuk az átalakított sebességeket. Ebben az esetben a következő állítás igaz:

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

Amint itt észrevehetjük, az adapterünk átalakul 268 mph nak nek 431 km / h erre a konkrét esetre.

2.2. Mikor kell használni az adaptermintát

  • Amikor egy külső komponens magával ragadó funkciókat biztosít, amelyeket szeretnénk újrafelhasználni, de ez nem kompatibilis a jelenlegi alkalmazásunkkal. Kialakítható egy megfelelő adapter, hogy kompatibilisek legyenek egymással
  • Amikor alkalmazásunk nem kompatibilis a kliensünk által várt felülettel
  • Amikor a régi kódot újra fel akarjuk használni alkalmazásunkban anélkül, hogy bármilyen módosítást végeznénk az eredeti kódban

3. Következtetés

Ebben a cikkben áttekintettük az Adapter tervezési mintáját a Java-ban.

A példa teljes forráskódja elérhető a GitHub oldalon.