Design Patterns for good Java Developers