Once you start working with the "classic" design patterns (the ones listed in the book "Design Patterns: Elements of Reusable Object-Oriented Software" by Gamma, Helm, Johnson and Vlissides ...