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
{
    MakeNoise();
 }

class Dog : Animal
{
     MakeNoise()
    { 
        bark();
     }
}

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?