Published on

[Structural] Facade

Real world example

How do you turn on the computer? "Hit the power button" you say! That is what you believe because you are using a simple interface that computer provides on the outside, internally it has to do a lot of stuff to make it happen. This simple interface to the complex subsystem is a facade.

In plain words

Facade pattern provides a simplified interface to a complex subsystem.

Wikipedia says

A facade is an object that provides a simplified interface to a larger body of code, such as a class library.

Programmatic Example

Taking our computer example from above. Here we have the computer class

class Computer {
    getElectricShock(){
        console.log('Ouch!')
    }

    makeSound(){
        console.log('Beep beep!')
    }

    showLoadingScreen(){
        console.log('Loading..')
    }

    bam(){
        console.log('Ready to be used!')
    }

    closeEverything(){
        console.log('Bup bup bup buzzz!')
    }

    sooth(){
        console.log('Zzzzz')
    }

    pullCurrent(){
        console.log('Hahah!')
    }
}

Here we have the facade

class ComputerFacade {
    protected computer;

    constructor(computer: Computer) {
        this.computer = computer;
    }

    turnOn(){
        this.computer.getElectricShock();
        this.computer.makeSound();
        this.computer.showLoadingScreen();
        this.computer.bam();
    }

    turnOff(){
        this.computer.closeEverything()
        this.computer.pullCurrent()
        this.computer.sooth()
    }
}

Now to use the facade

let computer = new ComputerFacade(new Computer())
computer.turnOn()
computer.turnOff()

References