I am from .Net background and I am planning to read the following book to address this question.
Foundations of Object-Oriented Programming Using .NET 2.0 Patterns - Christian Gross
What I am finding interesting about this book is
- Use of generics
- Explaining patterns as a solution to a problem