Padrões de Design de Software: Nem Sempre a Melhor Solução