Eu acho que existem três fatores que entram em jogo aqui.
Falta de massa crítica
Primeiro, um padrão é basicamente pouco mais do que dar um nome a algum código que implementa um "pedaço" de funcionalidade específico. A única maneira pela qual o nome fornece muito valor real é se você pode confiar em todos que sabem o que o nome significa, então, usando o nome, eles imediatamente entendem bastante sobre o código.
Os padrões nunca estabeleceram a massa crítica necessária para conseguir isso. Antes pelo contrário, AAMOF. Nos 20 (mais ou menos) anos desde que o livro do GoF foi lançado, tenho certeza de que não assisti a uma dúzia de conversas nas quais todos os envolvidos realmente conheciam padrões de design suficientes para melhorar a comunicação.
Em outras palavras: os padrões de design falharam especificamente porque falharam.
Muitos padrões
Eu acho que o segundo fator principal é que, se alguma coisa, eles inicialmente nomearam muitos padrões. Em um número razoável de casos, as diferenças entre os padrões são suficientemente sutis que é quase impossível dizer com certeza real se uma determinada classe se encaixa em um padrão ou em outro (ou talvez ambos - ou talvez nenhum).
A intenção era que você pudesse falar sobre código em um nível superior. Você seria capaz de rotular um pedaço de código bastante grande como a implementação de um padrão específico. Simplesmente usando esse nome predefinido, todo mundo que escuta normalmente sabe o quanto se importa com esse código, para que você possa passar para a próxima coisa.
A realidade tende a ser quase o oposto. Digamos que você esteja em uma reunião e diga a eles que essa classe em particular é uma fachada. Metade das pessoas na reunião nunca soube ou há muito se esqueceu exatamente do que isso significa. Um deles pede que você lembre as diferenças exatas entre uma fachada e, por exemplo, um proxy. Ah, e as pessoas que realmente conhecem padrões passam o resto da reunião debatendo se isso realmente deve ser considerado uma Fachada ou "apenas" um Adaptador (com aquele cara ainda insistindo que isso parece um Proxy para ele).
Dado que sua intenção era realmente apenas dizer: "esse código não é muito interessante; vamos seguir em frente", tentando usar o nome de um padrão apenas para adicionar distração, não valor.
Falta de interesse
A maioria dos padrões de design não lida com as partes interessantes do código. Eles lidam com coisas como: "como crio esses objetos?" E "como faço para que esse objeto fale com aquele?" Memorizar nomes de padrões para esses (bem como os argumentos acima mencionados sobre detalhes e outros) é simplesmente colocar muita energia em coisas que a maioria dos programadores simplesmente não se importa.
Em outras palavras: os padrões lidam com as coisas iguais entre muitos programas - mas o que realmente torna um programa interessante é como ele é diferente de outros programas.
Sumário
Os padrões de design falharam porque:
- Eles não conseguiram atingir massa crítica.
- A diferenciação entre os padrões foi insuficiente para garantir clareza.
- Eles lidavam principalmente com partes do código que quase ninguém se importava.