Facade Pattern
Overview
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a high-level
interface that makes the subsystem easier to use.
Participants
- knows which subsystem classes are responsible for a request.
- delegates client requests to appropriate subsystem objects.
- implements subsystem functionality.
- handles work assigned to the Facade object.
- have no knowledge of the facade; that is, they keep no references to it.
Parameters
-
when selected, will create special JavaDoc links in the code between pattern participants, describing
their relationships.
Applicability
Use the Facade pattern when
- you want to provide a simple interface to a complex subsystem. Subsystems
often get more complex as they evolve. Most patterns, when applied, result
in more and smaller classes. This makes the subsystem more useable and easier
to customize, but it also becomes harder to use for clients that don't need
to customize it. A facade can provide a simple default view of the subsystem
that is good enough for most clients. Only clients needing more customizability
will need to look beyond the facade.
- there are many dependencies between client and implementation classes of an abstraction.
Introduce a facade to decouple the subsystem from clients and other subsystems, thereby
promoting subsystem independence and portability.
- you want to layer your subsystems. Use a facade to define an entry point to
each subsystem level. If subsystems are dependency, then you can simplify
the dependencies between them by making them communicate with each other solely
through their facades.