interface MediaPlayer {
void play(String fileType, String fileName);
}
interface AdvancedMediaPlayer {
void playVlc(String fileName);
void playMp4(String fileName);
}
class VlcPlayer implements AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("Playing VLC: " + fileName);
}
public void playMp4(String fileName) {}
}
class Mp4Player implements AdvancedMediaPlayer {
public void playMp4(String fileName) {
System.out.println("Playing MP4: " + fileName);
}
public void playVlc(String fileName) {}
}
class MediaAdapter implements MediaPlayer {
AdvancedMediaPlayer advanced;
MediaAdapter(String fileType) {
if (fileType.equals("vlc"))
advanced = new VlcPlayer();
else if (fileType.equals("mp4"))
advanced = new Mp4Player();
}
public void play(String fileType, String fileName) {
if (fileType.equals("vlc"))
advanced.playVlc(fileName);
else if (fileType.equals("mp4"))
advanced.playMp4(fileName);
}
}
class AudioPlayer implements MediaPlayer {
MediaAdapter adapter;
public void play(String fileType, String fileName) {
if (fileType.equals("mp3")) {
System.out.println("Playing MP3: " + fileName);
} else if (fileType.equals("vlc") || fileType.equals("mp4")) {
adapter = new MediaAdapter(fileType);
adapter.play(fileType, fileName);
}
}
}
public static void main(String[] args) {
AudioPlayer player = new AudioPlayer();
player.play("mp3", "song.mp3");
player.play("mp4", "video.mp4");
player.play("vlc", "movie.vlc");
}The Adapter pattern allows incompatible interfaces to work together. It acts as a bridge between two otherwise incompatible classes by converting the interface of one class into an interface expected by the clients. Also known as Wrapper, it is commonly used to integrate legacy code, third-party libraries, or systems with different interfaces without modifying their source code.