From Head First Design Patterns. Design Principle: Idnetify the aspects of your application that vary and separate them from what stays the same. Here's another way to think about it: Take the parts that vary and encapsulate them, so that later you c