Facade Design Pattern

  1. Facade Design Pattern

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 :

Key Component of Facade Method Design Pattern

Implementation

Subsystem Class:

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);
    }
}

Facade Class:

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);
        }
    }
}

Client

// 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);
        }
    }
}