Object Oriented Design and Patterns by Cay Horstmann