Java(tm) in Practice: Design Styles and Idioms for Effective Java