Benefits:... • It provides a simpler interface to a complex subsystem without reducing the options provided by the subsystem • It shields clients from the complexity of the subsystem components • It promotes looser coupling between the subsystem and its clients • It reduces the coupling .
Applicable Scenarios: • You need to provide a simple interface to a complex subsystem • Several dependencies exist between clients and the implementation classes of an abstraction • When layering the subsystems is necessary or desired...