Separate Abstractions

For the full description, implementation variations, consequences, and detailed sample, see Page 237 in Java Application Architecture.

Statement

Place abstractions and the classes that implement them in separate modules.

Description

You create an abstract class or interface to help reduce coupling between classes. This offers the ability to create new implementations of the abstraction without impacting clients dependent on that abstraction. In this sense, abstract coupling allows you to add new classes to your system without modifying existing classes, and it does so by reducing the dependency relationship between classes.

SeparateAbstractionsPattern