I enjoy the Head First series of books, but they may not be for everyone. This book, Head First: Design Patterns, is not for beginning programmers, but you won't become an advanced programmer without understanding the concepts that are covered in this book.
To use this book effectively you should have a good understanding of OOP principles and be ready for extending abstract classes and implementing interface classes. If you don't know that those are, that's OK, the authors give lots of examples and you should reference your other Java materials to get up to speed where you have to.
This is a book I review every year or so to remind myself about the concepts and to pick up what either went over my head the first time, or what was not meaningful to me at the time. Reading a book like this again gives me confidence that my Java understanding has grown since the last time I read the book.
Definitely recommended for anyone who wants to program professionally or wants to program like a professional.