I really liked Head First Design Patterns
but I'm still struggling with this aspect myself.
Its all very well teaching people the basics with silly examples like
abstract class Animal
class Dog : Animal
but that doesn't help when trying to decide things like how much responsibility each class should be given, how to create useful abstractions and reusable object models etc.
Where do you go to learn the "real" stuff?