- encapsulation
- dependency
- flexibility
- performance
- re-usability
- Make it easier to reuse successful designs and architectures
- Can even improve the documentation and maintenance of existing systems
- Help you identify less-obvious abstractions and the objects that can capture them