Pattern for separating an abstraction from it's concrete implementation.