The Facade pattern provides a unified interface to a set of interfaces in a subsystem. It defines a higher-level interface that makes the subsystem easier to use.
// Subsystem 1: CPU class with methods to freeze, jump to a position, and execute instructions
class CPU {
// Freezes the CPU
freeze() {
console.log("Freezing CPU...");
}
// Jumps to a specific position in memory
jump(position) {
console.log(`Jumping to position ${position}...`);
}
// Executes instructions
execute() {
console.log("Executing instructions...");
}
}
// Subsystem 2: Memory class with a method to load data at a specific position
class Memory {
// Loads data into a specific position in memory
load(position, data) {
console.log(`Loading data '${data}' at position ${position}...`);
}
}
// Subsystem 3: HardDrive class with a method to read data from a specific LBA (Logical Block Addressing)
class HardDrive {
// Reads data from a specific LBA and returns the data
read(lba, size) {
console.log(`Reading ${size} bytes from LBA ${lba}...`);
return "data";
}
}
// Facade: ComputerFacade class to simplify the interaction with the subsystems
class ComputerFacade {
constructor() {
// Initialize subsystems
this.cpu = new CPU();
this.memory = new Memory();
this.hardDrive = new HardDrive();
}
// Method to start the computer by coordinating the subsystems
start() {
// Freeze the CPU
this.cpu.freeze();
// Load data from the hard drive into memory
this.memory.load(0, this.hardDrive.read(0, 1024));
// Jump to the start position in memory
this.cpu.jump(0);
// Execute instructions
this.cpu.execute();
}
}Subsystem Classes:
CPU: Represents the CPU with methods to freeze, jump to a memory position, and execute instructions.Memory: Represents the memory with a method to load data at a specific position.HardDrive: Represents the hard drive with a method to read data from a specific Logical Block Addressing (LBA).
Facade Class:
- ComputerFacade: Simplifies the interaction with the subsystems by providing a higher-level interface. It initializes instances of the
CPU,Memory, andHardDriveclasses and provides astartmethod to coordinate their actions.
const computer = new ComputerFacade();
computer.start();- Creates an instance of
ComputerFacadeand calls thestartmethod to start the computer, which internally coordinates the actions of theCPU,Memory, andHardDrivesubsystems.
The Facade pattern helps in reducing the complexity of the code and makes the system easier to use and understand by providing a single entry point to various subsystems.