Adapter pattern is used when an interface does not match the new requirement and the existing interface needs to adapt to another interface.
Check complete details and explanations about the Adapter pattern in the article: Adapter Design Pattern
This article demonstrates Adapter pattern implementations in Java. Check the following examples.
Example #1: Transport
Existing Situation:
In the existing code, we already have classes named Plane and Helicopter. Both these classes implement an interface named AirTransport.
New requirement:
Then sometime later we are trying to add a feature for a transport system. So we have created an interface named Transport and all the transport related classes will implement the Transport interface.
Problem:
The AirTransport interface and its implementations do not match with the new Transport interface. And we don’t want to change the existing interface(AirTransport) and its implementations (Plane and Helicopter)
Solution:
- Create a new class named AirTransportAdapter.
- Import Transport interface in AirTransportAdapter.
- Implement all required functions, and make any required changes to achieve the final result.
- While using the new adapter class, pass the object in the constructor.
Class Diagram:
Take a look at the class diagram.

AirTransport Interface
package com.bigboxcode;
public interface AirTransport {
int getNumberOfWheels();
int getNumberOfEngines();
double getWeight();
// In Nautical miles
double getDistanceTravelled();
double getTravelCostTotal();
}
Plane Class [implements AirTransport]
package com.bigboxcode;
public class Plane implements AirTransport {
@Override
public int getNumberOfWheels() {
return 3;
}
@Override
public int getNumberOfEngines() {
return 2;
}
// get weight in pound
@Override
public double getWeight() {
return 127_000;
}
// In Nautical miles
@Override
public double getDistanceTravelled() {
return 500; // Nautical files
}
@Override
public double getTravelCostTotal() {
return 3_000;
}
}
Helicopter Class [implements AirTransport]
package com.bigboxcode;
public class Helicopter implements AirTransport {
@Override
public int getNumberOfWheels() {
return 0;
}
@Override
public int getNumberOfEngines() {
return 1;
}
// Get weight in LB
@Override
public double getWeight() {
return 12_000;
}
// In Nautical miles
@Override
public double getDistanceTravelled() {
return 180; // nautical miles
}
@Override
public double getTravelCostTotal() {
return 20_000;
}
}
Transport Interface
package com.bigboxcode;
public interface Transport {
int getNumberOfWheels();
double getWeight();
// In miles
double getDistanceTravelled();
double getTravelCostPerMile();
}
Bus Class [implements Transport]
package com.bigboxcode;
public class Bus implements Transport{
@Override
public int getNumberOfWheels() {
return 4;
}
@Override
public double getWeight() {
return 10_000;
}
@Override
public double getDistanceTravelled() {
return 1_000;
}
@Override
public double getTravelCostPerMile() {
return 5;
}
}
Bike Class [implements Transport]
package com.bigboxcode;
public class Bike implements Transport{
@Override
public int getNumberOfWheels() {
return 2;
}
@Override
public double getWeight() {
return 700;
}
@Override
public double getDistanceTravelled() {
return 80;
}
@Override
public double getTravelCostPerMile() {
return 4;
}
}
AirTransportAdapter Class [implements Transport]
package com.bigboxcode;
public class AirTransportAdapter implements Transport {
private final AirTransport airTransport;
public AirTransportAdapter(AirTransport airTransport) {
this.airTransport = airTransport;
}
@Override
public int getNumberOfWheels() {
return this.airTransport.getNumberOfWheels();
}
@Override
public double getWeight() {
return this.airTransport.getWeight();
}
@Override
public double getDistanceTravelled() {
// Convert nautical mile to mile and return
double distanceInNauticalMile = this.airTransport.getDistanceTravelled();
return distanceInNauticalMile * 1.151;
}
@Override
public double getTravelCostPerMile() {
// calculate cost per mile from total cost
double totalCost = this.airTransport.getTravelCostTotal();
return totalCost / this.getDistanceTravelled();
}
}
Demo
package com.bigboxcode;
public class Main {
public static void main(String[] args) {
System.out.println("Get information of Bus travel...");
Bus bus = new Bus();
System.out.println("\nNumber of wheels: " + bus.getNumberOfWheels());
System.out.println("Weight(kg): " + bus.getWeight());
System.out.println("Distance(miles): " + bus.getDistanceTravelled());
System.out.println("Cost per mile: " + bus.getTravelCostPerMile());
System.out.println("\n\n-------------------------------------------\n\n");
System.out.println("Get information of Plane travel...");
AirTransportAdapter planeTransport = new AirTransportAdapter(new Plane());
System.out.println("\nNumber of wheels: " + planeTransport.getNumberOfWheels());
System.out.println("Weight(kg): " + planeTransport.getWeight());
System.out.println("Distance(miles): " + planeTransport.getDistanceTravelled());
System.out.println("Cost per mile: " + planeTransport.getTravelCostPerMile());
}
}
Output
Get information of Bus travel...
Number of wheels: 4
Weight(kg): 10000.0
Distance(miles): 1000.0
Cost per mile: 5.0
-------------------------------------------
Get information of Plane travel...
Number of wheels: 3
Weight(kg): 127000.0
Distance(miles): 575.5
Cost per mile: 5.212858384013901
Source Code
Use the following link to get the source code:
Example | Source Code Link |
---|---|
Example #1: Transport | ![]() |