Software Development Patterns with Java