What are the tradeoffs between different design options in a Java application?

Situational