I don't know about best book, but the purists might say Design Patterns: Elements of Reusable Object-Oriented Software
As far as my personal favorite, I like Head First Design Patterns published by O'Reilly. It's written in a conversational voice that appeals to me. When I read it, I reviewed my source code at the same time to see if it applied to what I was reading. If it did, I refactored. This is how I learned Chain of Responsibility.
Practice - Practice - Practice.