Facade Method Design Pattern is a structural design pattern that provides a simplified interface to a complex subsystem. It acts as a “front door,” concealing the internal complexity of the subsystem and making it easier for clients to interact with it.
The functionalities of the Facade Method Design Patterns are :
We have 3 complex functionalities, AudioPlayer, VideoPlayer and ImageLoader:
// AudioPlayer.java
class AudioPlayer {
void playAudio(String filename) {
System.out.println("Playing audio " + filename);
}
}
// VideoPlayer.java
class VideoPlayer {
void playVideo(String filename) {
System.out.println("Playing video " + filename);
}
}
// ImageLoader.java
class ImageLoader {
void loadImage(String filename) {
System.out.println("Loading image " + filename);
}
}
Here Facade class is Multimedia class.
// Facade class
class MultimediaFacade {
private AudioPlayer audioPlayer;
private VideoPlayer videoPlayer;
private ImageLoader imageLoader;
public MultimediaFacade() {
this.audioPlayer = new AudioPlayer();
this.videoPlayer = new VideoPlayer();
this.imageLoader = new ImageLoader();
}
void playMedia(String filename, String mediaType) {
if (mediaType.equals("audio")) {
audioPlayer.playAudio(filename);
} else if (mediaType.equals("video")) {
videoPlayer.playVideo(filename);
} else if (mediaType.equals("image")) {
imageLoader.loadImage(filename);
} else {
System.out.println("Unsupported media type " + mediaType);
}
}
}
// Facade class
class MultimediaFacade {
private AudioPlayer audioPlayer;
private VideoPlayer videoPlayer;
private ImageLoader imageLoader;
public MultimediaFacade() {
this.audioPlayer = new AudioPlayer();
this.videoPlayer = new VideoPlayer();
this.imageLoader = new ImageLoader();
}
void playMedia(String filename, String mediaType) {
if (mediaType.equals("audio")) {
audioPlayer.playAudio(filename);
} else if (mediaType.equals("video")) {
videoPlayer.playVideo(filename);
} else if (mediaType.equals("image")) {
imageLoader.loadImage(filename);
} else {
System.out.println("Unsupported media type " + mediaType);
}
}
}