Practical Design Patterns for Java Developers: Hone your software design skills by implementing popular design patterns in Java - Wengner (IEEE, 2003)