Eu acho que existem três fatores que entram em jogo aqui.
Falta de massa crítica
Primeiro, um padrão é basicamente pouco mais que dar um nome a algum código que implementa um "pedaço" específico de funcionalidade. A única maneira que o nome fornece muito valor real é se você pode depender de todos sabendo o que o nome significa, apenas usando o nome, eles imediatamente entendem muito sobre o código.
Os padrões nunca estabeleceram a massa crítica necessária para isso. Pelo contrário, o AAMOF. Nos 20 (ou mais) anos que se passaram desde o lançamento do livro GoF, tenho certeza de que não vi mais de uma dúzia de conversas em que todos os envolvidos realmente conheciam padrões de design suficientes para seu uso para melhorar a comunicação.
Para colocá-lo um pouco mais curiosamente: padrões de design falharam especificamente porque falharam.
Muitos padrões
Eu acho que o segundo fator principal é que, se qualquer coisa, eles inicialmente nomearam muitos padrões. Em um bom número de casos, as diferenças entre os padrões são suficientemente sutis, o que é quase impossível dizer com certeza se uma determinada classe se encaixa em um padrão ou outro (ou talvez ambos - ou talvez nenhum).
A intenção era que você pudesse falar sobre código em um nível mais alto. Você seria capaz de rotular um grande pedaço de código como a implementação de um padrão específico. Simplesmente usando esse nome pré-definido, todo mundo escutando normalmente saberia tanto quanto eles se importavam com esse código, então você poderia 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 aula em particular é uma Fachada. Metade das pessoas na reunião nunca soube ou esqueceu há muito tempo exatamente o que isso significa. Um deles pede para você lembrar a diferença exata entre uma fachada e, digamos, uma procuração. Ah, e o casal de pessoas que realmente conhece padrões passam o resto da reunião debatendo se isso realmente deveria ser considerado uma Fachada ou "apenas" um Adaptador (com aquele cara ainda insistindo que parece um Proxy para ele).
Dado que a sua intenção era apenas dizer: "este código não é muito interessante; vamos seguir em frente", tentando usar o nome de um padrão apenas adicionou 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 eu crio esses objetos?", E "como faço para que esse objeto fale com esse?" Memorizar nomes de padrões para estes (assim como os argumentos acima mencionados sobre detalhes e tal) é simplesmente colocar muita energia em coisas que a maioria dos programadores simplesmente não se importam muito com isso.
Para colocar de forma um pouco diferente: os padrões lidam com as coisas que são as mesmas entre muitos programas - mas o que realmente torna um programa interessante é como ele é diferente de outros programas.
Resumo
Padrões de design falham porque:
- Eles não conseguiram atingir massa crítica.
- A diferenciação entre padrões foi insuficiente para garantir clareza.
- Eles lidam principalmente com partes do código que quase ninguém realmente se importava de qualquer maneira.