‘Head first’ series is designed for intuition. This one is especially useful in that it tries to pick the most frequently used patterns, and explain those in a fun way.
Not only that, it also emphasizes on the principles of object-oriented code, namely:
- Encapsulate what varies
- Favor composition over inheritance
- Program to interface, not implementation
- Strive for loosely coupled modules