Purpose:
Defines a higher-level interface to hide subsystem's complexities and provides an easy interface for client to use.
Case study:
Compiler subsystem
Structure:
-- The facade and backend classes(subsystem classes) are in a
separate
package from the client.
-- The backend API is package-private
-- The
facade API is public.
Implementation:
consider following two issues when implementing a facade:
-- Reducing client-subsystem coupling.
-- Public versus private subsystem classes.
reference:
http://www.allapplabs.com/java_design_patterns/facade_pattern.htm