Benefits:
• It provides a simpler interface to a complex subsystem without reducing the options provided by the subsystem.
• It shields clients from the complexity of the subsystem components.
• It promotes looser coupling between the subsystem and its clients.
• It reduces the coupling between subsystems provided that every subsystem uses its own Facade pattern and other parts of the system use the Facade pattern to communicate with the subsystem.
Applicable Scenarios:
• You need to provide a simple interface to a complex subsystem.
• Several dependencies exist between clients and the implementation classes of an abstraction.
• When layering the subsystems is necessary or desired.