На самом деле существуют две разные существенные причины существования паттернов.
Первое уже объяснено довольно хорошо: использование шаблонов смазывает общение между разработчиками. Если вы и я оба понимаем, что когда я говорю «Наблюдатель», я говорю об очень специфической структуре кода, то я могу очень быстро описать, как работает фрагмент кода, использующий этот шаблон. Альтернативой является полное описание решения, которое занимает много времени и подвержено ошибкам. («Ну, я создал этот чистый виртуальный класс, который описывает и взаимодействует с объектами-потребителями, а затем я создал класс, который поддерживает список активных потребителей, который ...»)
Второе преимущество шаблонов заключается в том, что они представляют собой готовые формы решений для общих проблемных форм. Если вы знаете свои шаблоны и, например, столкнулись с проблемой, когда вам нужно найти хороший способ получения информации от (возможно, нескольких) объектов-производителей к нескольким объектам-потребителям, не вводя ненужную связь между классами, вы узнаете «это это работа для наблюдателя! " и вы сразу узнаете, как решить вашу проблему.
Эти преимущества также действительно усиливают друг друга. Они позволяют вам быстро решить некоторые распространенные классы проблем, а затем, когда вы закончите, вы сможете очень быстро сообщить, как вы решили проблему.
Сравните это с миром, где шаблоны "не существуют". Вы сталкиваетесь с одним из этих классов проблем, которые, как правило, не являются тривиальными проблемами проектирования, и вы тратите немало времени на то, чтобы найти хорошее решение (которое, между прочим, очень похоже на соответствующий шаблон). Затем приходит ваш коллега и хочет узнать, как вы его решили, и вы тратите час на обсуждение того, как и почему.
Все это связано с предупреждением, которое должно показаться довольно очевидным: не пытайтесь навязывать проблемы в не подходящие шаблоны. Если шаблон не подходит к проблеме, то решение в конечном итоге будет запутанным, и вы потеряете преимущество сокращения шаблонов. Кроме того, поскольку ваша работа больше не будет соответствовать пониманию вашим коллегами смысла шаблона, вы потеряете стоимость коммуникационных выгод. Фактически, вы, вероятно, увеличите стоимость связи сверх стоимости без шаблонов, потому что неправильное использование шаблона даст вашим коллегам ложное понимание решения, которое хуже, чем отсутствие понимания вообще.