Creo que hay tres factores que entran en juego aquí.
Falta de masa crítica
Primero, un patrón es básicamente poco más que dar un nombre a algún código que implementa una "porción" particular de funcionalidad. La única forma en que ese nombre proporciona mucho valor real es si puede confiar en que todos sepan lo que significa el nombre, de modo que al usar el nombre, inmediatamente entiendan bastante sobre el código.
Sin embargo, los patrones nunca establecieron la masa crítica que necesitaban para lograr eso. Más bien lo contrario, AAMOF. En los 20 (más o menos) años desde que salió el libro GoF, estoy bastante seguro de que no he visto hasta una docena de conversaciones en las que todos los involucrados realmente conocían suficientes patrones de diseño para su uso para mejorar la comunicación.
Para decirlo un poco más curiosamente: los patrones de diseño fallaron específicamente porque fallaron.
Demasiados patrones
Creo que el segundo factor principal es que, en todo caso, inicialmente nombraron demasiados patrones. En un buen número de casos, las diferencias entre los patrones son lo suficientemente sutiles que es casi imposible decir con certeza real si una clase en particular se ajusta a un patrón u otro (o tal vez a ambos, o tal vez ninguno).
La intención era que pudieras hablar sobre el código en un nivel superior. Podrías etiquetar un fragmento de código bastante grande como la implementación de un patrón particular. Simplemente usando ese nombre predefinido, todos los que escuchan generalmente sabrían tanto como se preocupaban por ese código, por lo que podría pasar al siguiente paso.
La realidad tiende a ser casi lo contrario. Digamos que estás en una reunión y diles que esta clase en particular es una Fachada. La mitad de las personas en la reunión nunca supieron o hace mucho tiempo olvidaron exactamente lo que eso significa. Uno de ellos le pide que le recuerde las diferencias exactas entre una Fachada y, por ejemplo, un Proxy. Ah, y la pareja de personas que realmente conocen los patrones pasan el resto de la reunión debatiendo si esto realmente debería considerarse una Fachada o "solo" un Adaptador (con ese tipo todavía insistiendo en que le parece un Proxy).
Dado que su intención era realmente solo decir: "este código no es muy interesante; sigamos adelante", tratando de usar el nombre de un patrón que solo agrega distracción, no valor.
Falta de interés
La mayoría de los patrones de diseño realmente no tratan con las partes interesantes del código. Se ocupan de cosas como: "¿cómo creo estos objetos?" Y "¿cómo consigo que este objeto hable con ese?" Memorizar nombres de patrones para estos (así como los argumentos antes mencionados sobre detalles y demás) simplemente está poniendo mucha energía en cosas que a la mayoría de los programadores simplemente no les importa mucho.
Para decirlo de manera ligeramente diferente: los patrones tratan las cosas que son iguales entre muchos programas, pero lo que realmente hace que un programa sea interesante es cómo es diferente de otros programas.
Resumen
Los patrones de diseño fallaron porque:
- No lograron alcanzar la masa crítica.
- La diferenciación entre patrones fue insuficiente para garantizar la claridad.
- En su mayoría, se ocuparon de partes del código que a casi nadie le importaba de todos modos.