← Back to Home
Facade Pattern
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
What is it?
The Facade pattern simplifies interactions with complex systems by providing a unified and minimal API that hides the underlying complexity.
Example
class CPU {
freeze() { return 'Freezing CPU'; }
jump(position: number) { return `Jumping to ${position}`; }
execute() { return 'Executing instructions'; }
}
class Memory {
load(position: number, data: string) {
return `Loading ${data} into position ${position}`;
}
}
class HardDrive {
read(position: number, size: number) {
return `Reading ${size} bytes from position ${position}`;
}
}
class ComputerFacade {
private cpu = new CPU();
private memory = new Memory();
private hardDrive = new HardDrive();
start() {
return [
this.cpu.freeze(),
this.memory.load(0, 'bootloader'),
this.hardDrive.read(0, 256),
this.cpu.jump(0),
this.cpu.execute()
];
}
}
const computer = new ComputerFacade();
console.log(computer.start());Common Uses
- Hiding complex library calls behind a simple API
- Startup/shutdown sequences
- Unifying legacy APIs under a single entry point
When to Use
- When you need to simplify complex subsystems
- To shield client code from implementation details
Caution
- Can hide important details from developers
- Facade can become god object if it does too much