The problem with learning patterns is you have to have enough experience with software to have seen the pattern (normally unnamed) in the code your written or maintained. If you've never written an observer, reading the description of the pattern will not be easy to grok.
I'm not saying you should not read about patterns. But be aware that one's ability to appreciate patterns is limited by one's inexperience.
The other problem with patterns, and the problem you will have, is they don't exist. At least they exist even less that "software" exists. Patterns are ideas and concepts. They are not runnable code. Runnable code can implement a pattern but the reverse doesn't exist. You can't just type "singleton" into your code and suddenly a singleton exists. There is no language where adding a "visitor" attribute suddenly makes all the glue to implement the visitor pattern. There are best practices and examples of patterns in various languages but they are not something you can stick in a library and just call.
So what you really want to do is teach some best practices where the core of those practices involves recognizing and using patterns. Being observant is a very difficult skill to teach (for all forms of observation).
The third problem with patterns is they aren't really the domain of coders. They are formally called design patterns for a reason. They are most properly a design time construct. Sure you can use patterns to help refactor existing code. But by and large, design patterns are jargon to simplify design discussion. This is again why there aren't any singleton code libraries. Using a singleton is an approach to code, not code itself.
All that said, trying to educate your programmers about design patterns can't hurt. Getting programmers to think is a good thing and if only one of them comes away from it with more than a surface understanding of patterns, you probably come out ahead of the game. Good luck.