The Facade pattern's name is analogous to the facade of a building—as the name implies, it's an exterior face that hides a complex inner structure. Contrary to building architecture, in software development, the goal of a facade is not to beautify; instead, it is to simplify. As we are going to see in the following diagram, an implementation of the Facade pattern is usually limited to a single class that acts as a simplified interface to a collection of interacting subsystems:
As we can see in the preceding diagram, EngineFacade acts as an interface to the various components of the engine, thereupon the client is unaware of what is happening behind the scenes when calling StartEngine() on EngineFacade. It's unaware of the components that make up the engine and how to reach them; it only knows what it needs to know. This is similar...