Have you read Design Patterns: Elements of Reusable Object-Oriented Software by the "Gang of Four"?
That was the book which made me glad that I'd learned a programming language that supported object-oriented programming.
It doesn't show the wrong way to do things, but part of the "pattern description" are the "forces" or circumstances for which each pattern is a useful solution.
The code examples are small (but clean).