Behavioral Design Patterns in Java