Шаблон проектирования - элемент архитектуры программы, упрощающий и ускоряющий её разработку.
Шаблоны встречаются в нашей жизни более чем часто. Большая часть действий, выполняемых человечеством, типовые. Потому и существуют типовые проекты квартир и коттеджи, по шаблону создаются автомобили, даже воспитание детей подвержено чётким психологическим шаблонам. Поэтому нет ничего удивительного в том, что шаблоны процветают и в программировании.
Шаблон проектирования, если мы говорим о программировании, - это некоторый кусок архитектуры программы, который удобно применять для решения распространённых задач. Следует отличать шаблон проектирования от шаблона программного кода: они имеют совершенно разную природу и разное применение. Шаблон проектирования лишь описывает структуру решения какой-либо задачи, в то время как шаблон программного кода есть готовое решение задачи, в которое остаётся лишь подставить исходные данные. Шаблоны проектирования более гибки, чем шаблоны кода, а потому задачи, решаемые с их помощью, несколько шире, чем те, которые решаются с помощью шаблонов кода. Если проводить аналогию, скажем, с физическими задачами, то шаблон проектирования - это система уравнений, которая может применяться для движения тел на любых планетах и изменяться удалением уравнений из неё или добавлением новых; в то время как шаблон кода - это её решение, в котором можно менять лишь начальные параметры (например, начальную скорость тела и его массу).
Поскольку большей частью приложения пишутся на объектно-ориентированных языках программирования, то современные шаблоны проектирования также строятся на объектах. Каждый шаблон описывается как определённая иерархия объектов, каждый из которых занят каким-то полезным делом в программе и при этом взаимодействует с другими объектами. Существуют "канонические" шаблоны, которые описаны в книге, созданной так называемой "Бандой четырёх" (по-английски эта книга называется "Design Patterns - Elements of Reusable Object-Oriented Software" - она есть и на русском, и если вы программируете, то просто обязаны её прочитать на любом языке). Впрочем, в каждой команде программистов могут существовать и собственные шаблоны, которые могут даже лучше соответствовать конкретной специализации команды.
Не стоит путать шаблоны проектирования с алгоритмами. Здесь, как и в случае с шаблонами кода, эти понятия лежат, так сказать, в разных плоскостях. Алгоритм - понятие, вообще говоря, довольно расплывчатое, но в программировании, как правило, он подразумевает способ получения какого-либо конкретного результата (например, вычисления числа "пи" или уменьшения размера файла благодаря компрессии). Шаблон проектирования подразумевает не какую-либо конкретную последовательность действий, как алгоритм, а лишь некую внутреннюю структуру программы и отношения между её отдельными элементами (объектами).
Вадим СТАНКЕВИЧ