I find design patterns of marginal value. Any well-organized and designed software framework has hundreds of design patterns, and very few of them are described in the formal "pattern literature".
Before there were design patterns, there was well-designed software which had many patterns that could be re-used in many situations. For example, Kernighan and Ritchie's book on C contained an example of a calculator implemented using yacc and lex and a stack, symbol table, function pointer passing (i.e. basically dynamic binding) and contained a large number of patterns for the size of the book.
You can probably learn hundreds of more useful design patterns by studying e.g. Microsoft's .NET framework, Java class libraries, etc. than by reading a book on design patterns.
Really, good software has a design. And if the design is good, it can probably be re-used. Voila -- a design pattern.