Allows the client to
Use the module's primary functionality alone when the default implementation is adequate
Control the module's implementation-strategy decisions when necessary
Deal with functionality and implementation strategy decisions in largely separate ways