Il y a vraiment deux raisons différentes et substantielles à l'existence de modèles.
Le premier a déjà été assez bien expliqué: l'utilisation de modèles lubrifie la communication entre développeurs. Si vous et moi comprenons tous les deux que lorsque je dis «Observateur», je parle d'une structure de code très spécifique, je peux décrire très rapidement comment fonctionne un peu de code qui utilise ce modèle. L'alternative consiste à décrire complètement la solution, qui prend du temps et est sujette aux erreurs. ("Eh bien, j'ai créé cette classe virtuelle pure qui décrit et interface pour les objets de consommation, puis j'ai créé une classe qui maintient une liste de consommateurs actifs, qui ...")
Le deuxième avantage des modèles est qu'ils sont des formes de solution standard pour les formes de problème courantes. Si vous connaissez vos modèles et, par exemple, vous rencontrez un problème où vous devez trouver un bon moyen d'obtenir des informations à partir (éventuellement plusieurs) objets producteurs vers plusieurs objets consommateurs, sans introduire de couplage inutile entre les classes, vous reconnaîtrez "ce est un travail pour un observateur! " et vous saurez immédiatement comment résoudre votre problème.
Ces avantages se renforcent également vraiment. Ils vous permettent de résoudre rapidement certaines classes de problèmes courants, puis lorsque vous avez terminé, vous pouvez communiquer très rapidement comment vous avez résolu le problème.
Comparez cela à un monde où les modèles «n'existent pas». Vous rencontrez l'une de ces classes de problèmes, qui ne sont généralement pas des problèmes de conception triviaux, et vous passez pas mal de temps à trouver une bonne solution (qui, incidemment, ressemblera très probablement au modèle approprié). Ensuite, votre collègue arrive et veut savoir comment vous l'avez résolu, et vous passez une heure à discuter du comment et du pourquoi.
Tout cela est associé à une mise en garde qui devrait sembler assez évidente: n'essayez pas de forcer les problèmes dans des modèles qui ne correspondent pas. Si le motif ne correspond pas au problème, la solution finira par être compliquée et vous perdrez l'avantage de la réduction de l'effort des motifs. De plus, puisque votre travail ne correspondra plus à la compréhension de vos collègues de la signification du modèle, vous perdrez le coût de l'avantage de la communication. En fait, vous augmenterez probablement le coût de la communication au-delà du coût sans modèle, car une mauvaise utilisation du modèle donnera à vos collègues une fausse compréhension de la solution, ce qui est pire que pas de compréhension du tout.