A system has several identifiable subsystems and:
- The abstractions and implementations of a subsystem are tightly coupled.
- The system evolves and gets more complex, but early adopters might want to retain their simple views.
- You want to provide alternative novice, intermediate, and “power user” interfaces.
- There is a need for an entry point to each level of layered software.
But consider using instead:
- The Abstract Factory pattern for designs where subsystems create objects on behalf of the client.
Choose the Façade you need…
- Opaque
- Subsystem operations can only be called through the Façade.
- Transparent
- Subsystem operations can be called directly as well as through the Façade.
- Singleton
- Only one instance of the Façade is meaningful.