Existem muitos design patterns “oficialmente” reconhecidos…
Existem design patterns gerais para orientação a objetos, para J2EE, para usos específicos em outras tecnologias específicas (EJB, XML, etc), e por aí vai…
Dizer quais os mais adequados para cada uso acaba sendo praticamente a definição do Design Pattern. Normalmente, quando você vai estudar um, existe uma estrutura de documentação bem objetiva que fala mais ou menos para que serve, como usar e conseqüências.
Então acho que não existe um “tutorial geral sobre design patterns”, porque realmente cada um é cada um e não dá para explicar dezenas de design patterns em um texto genérico. Se quiser aprender vai ter que ser pelo método difícil mesmo… Não precisa ficar decorando todos os detalhes de cada um, o importante é ter em mente que “alguém já inventou uma solução para isso” quando você se deparar com um problema real. Aí basta ir consultar novamente sua fonte para ver como implementá-la.
Quanto aos mais comuns, o livro do GoF recomenda que a pessoa comece estudando pelos seguintes:
- Abstract Factory
- Adapter
- Composite
- Decorator
- Factory Method
- Observer
- Strategy
- Template Method