online version of Mark Grand - Design Patterns in Java