Here is a link I found useful when trying to figure out what is the best design pattern to use for a given task or software problem on the fly . http://www.rmfusion.com/design_patterns/design_patterns_menu.htm
Here :-
Design patterns are divided in a very useful logical way
Simple explanation for each one , with a very good demonstration Class diagram .