Adapter Pattern
Adapter Pattern
Adapter pattern works as a bridge between two incompatible interfaces. This type of
design pattern comes under structural pattern as this pattern combines the
capability of two independent interfaces.
Implementation
We have a MediaPlayer interface and a concrete class AudioPlayer implementing the
MediaPlayer interface. AudioPlayer can play mp3 format audio files by default.
We want to make AudioPlayer to play other formats as well. To attain this, we have
created an adapter class MediaAdapter which implements the MediaPlayer interface
and uses AdvancedMediaPlayer objects to play the required format.
AudioPlayer uses the adapter class MediaAdapter passing it the desired audio type
without knowing the actual class which can play the desired format.
AdapterPatternDemo, our demo class will use AudioPlayer class to play various
formats.
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm 1/5
15/01/24, 11:50 Design Patterns - Adapter Pattern
Step 1
Create interfaces for Media Player and Advanced Media Player.
MediaPlayer.java
AdvancedMediaPlayer.java
Step 2
Create concrete classes implementing the AdvancedMediaPlayer interface.
VlcPlayer.java
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm 2/5
15/01/24, 11:50 Design Patterns - Adapter Pattern
@Override
public void playMp4(String fileName) {
//do nothing
}
}
Mp4Player.java
@Override
public void playVlc(String fileName) {
//do nothing
}
@Override
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: "+ fileName);
}
}
Step 3
Create adapter class implementing the MediaPlayer interface.
MediaAdapter.java
AdvancedMediaPlayer advancedMusicPlayer;
if(audioType.equalsIgnoreCase("vlc") ){
advancedMusicPlayer = new VlcPlayer();
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm 3/5
15/01/24, 11:50 Design Patterns - Adapter Pattern
}else if (audioType.equalsIgnoreCase("mp4")){
advancedMusicPlayer = new Mp4Player();
}
}
@Override
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("vlc")){
advancedMusicPlayer.playVlc(fileName);
}
else if(audioType.equalsIgnoreCase("mp4")){
advancedMusicPlayer.playMp4(fileName);
}
}
}
Step 4
Create concrete class implementing the MediaPlayer interface.
AudioPlayer.java
@Override
public void play(String audioType, String fileName) {
else{
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm 4/5
15/01/24, 11:50 Design Patterns - Adapter Pattern
Step 5
Use the AudioPlayer to play different types of audio formats.
AdapterPatternDemo.java
Step 6
Verify the output.
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm 5/5