Knowledge of design patterns can be really useful when designing software. If you don't know what a design pattern is, then from Wikipedia:
In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.
Design patterns were made famous by the book Design patterns: elements of reusable object-oriented software, written by the Gang of Four, or GoF. Although I've never got round to reading it, it is fairly high on my to-read list!
Despite not having read the GoF book I'm still aware of some of the more common design patterns, such as the singleton, factory, and iterator patterns. Such is the nature of patterns that I've probably used some without even being aware,after all they are just common reusable software designs.
I recently came across an excellent website that gives details on all of the GoF design patterns, including descriptions, UML diagrams, and sample code in Java, C++ and PHP! The site isn't good enough to displace the GoF book from my to-read list, but I'm sure I'll find it useful for the mean time.