For the full description, implementation variations, consequences, and detailed sample, see Page 206 in Java Application Architecture.
Provide modules with a default implementation.
To maximize reuse, a module must be flexible enough so that it can function in variety of different operating environments. Yet, for a module to be usable, it must be independently deployable. To address this tension, a module can be given a Default Implementation with well-defined extension points so that the module can be extended when necessary.