Intent
Make a complex system simpler by providing a unified or general interface, which is a higher layer to these subsystems.
Where to use & benefits
- Want to reduce complexities of a system.
- Decouple subsystems , reduce its dependency, and improve portability.
- Make an entry point to subsystems.
- Minimize the communication and dependency between subsystems.
Structure

Participants
Facade (MainApplet)
It knows which subsystem classes are responsible for a request and delegates client requests to appropriate subsystem objects.
subsystem classes (IShapeFactory, ShapeContainerContext, ICommandMediator, etc.)
This implement subsystem functionality and handle work assigned by the Facade object.
Example
In the demonstration application, MainApplet class acts the facade class and responsible for delegating the user events and collaborating with other classes to perform the required operations.
Class Diagram

(only few classes are shown in the diagram)