Facade

structural

Provides a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

Intent

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.

Motivation

When you want to provide a simple interface to a complex subsystem, or you want to layer your subsystems, the Facade pattern is useful. It shields clients from subsystem components.

Structure

The pattern involves a Facade class that provides simple methods to complex subsystem functionality. The Facade delegates client requests to appropriate subsystem objects.

Participants

  • •Facade - knows which subsystem classes are responsible for a request and delegates client requests
  • •Subsystem classes - implement subsystem functionality and handle work assigned by the Facade

Pros

  • ✓Shields clients from subsystem components
  • ✓Promotes weak coupling
  • ✓Simplifies the interface
  • ✓Allows for easier testing

Cons

  • ✗Can become a god object
  • ✗May limit access to advanced features

Use Cases

Complex library APIs
Home theater systems
Compiler subsystems
Database connection management
Video conversion frameworks

Implementation Tips

Considerations

  • •Decide what functionality to expose
  • •Consider making facade optional
  • •Think about subsystem initialization
  • •Plan for subsystem evolution

Tips

  • •Keep the facade interface simple and focused
  • •Don't prevent access to subsystem if needed
  • •Consider using facade as a singleton
  • •Document what the facade simplifies

Interactive Code Editor

Related Patterns