https://refactoring.guru/design-patterns/facade
Target: Avoid call many function from something or package.
A facade is a class that provides a simple interface to a complex subsystem which contains lots of moving parts. A facade might provide limited functionality in comparison to working with the subsystem directly. However, it includes only those features that clients really care about.
Example:
When you want to order pizza. Just call to the operator who provide you all function of shop like order, payment, delivery,...
interface IGameFacade {
startGame(): void;
pauseGame(): void;
endGame(): void;
}
class GameFacade implements IGameFacade {
private physicsSystem: PhysicsSystem;
private uiManager: UIManager;
constructor() {
this.physicsSystem = new PhysicsSystem();
this.uiManager = new UIManager();
}
startGame() {
this.physicsSystem.enable();
this.uiManager.showGameUI();
console.log("Game started!");
}
pauseGame() {
this.physicsSystem.disable();
this.uiManager.showPauseMenu();
console.log("Game paused.");
}
endGame() {
this.physicsSystem.reset();
this.uiManager.showEndScreen();
console.log("Game ended.");
}
}
class PhysicsSystem {
enable() { console.log("Physics enabled"); }
disable() { console.log("Physics disabled"); }
reset() { console.log("Physics reset"); }
}
class UIManager {
showGameUI() { console.log("Game UI shown"); }
showPauseMenu() { console.log("Pause menu shown"); }
showEndScreen() { console.log("End screen shown"); }
}
// Usage
const game = new GameFacade();
game.startGame();
game.pauseGame();
Top comments (0)