Шаблон проектирования - это многократно используемое решение часто встречающейся проблемы проектирования. На самом деле, мы можем обобщить следующее: Шаблон - это общее многократно используемое решение часто встречающейся проблемы. Существуют не только шаблоны проектирования, но и шаблоны кодирования (хотя мы их так не называем, мы называем их идиомами), шаблоны архитектуры, шаблоны взаимодействия с пользователем, шаблоны процессов и т. Д.
Однако в этом определении есть небольшая проблема: в программировании мы называем общее многократно используемое решение часто встречающейся проблемы Программа . Другими словами, если у вас есть повторяющаяся проблема, вы пишете программу, и только если вы не можете написать программу, , тогда вам нужен шаблон.
Итак, альтернативное определение может быть следующим: Шаблон - это Программа, которую вы не можете написать, потому что ваш язык программирования слишком слаб для его выражения.
Итак, в общем, вы должны попытаться использовать лучший язык программирования, прежде чем пытаться использовать паттерн. Однако дизайн языка программирования - это все компромиссы: просто невозможно создать язык программирования, который может одинаково хорошо выражать все проблемы. Итак, иметь несколько шаблонов проектирования в вашем коде - это прекрасно, но их не должно быть много, и определенно не должно быть шаблонов в основной бизнес-логике. Это признак того, что вы выбрали неправильный язык программирования, и никакой шаблон не может это исправить.
Вот пример: в программировании на ассемблере параметрическая часть поведения, разделяемая между различными частями программы, является распространенной проблемой проектирования. И есть шаблон дизайна, который решает эту проблему: он называется подпрограммой. Но на другом языке, и практически во всех современных языках, подпрограммы (иногда называемые процедурами, функциями, методами, подпрограммами, подпрограммами) встроены прямо в язык. Они не Образцы, они просто там, и никто даже не думает о них больше. Итак, если в вашем коде всего одна или две подпрограммы, это нормально. Но если у вас их много, сборка, вероятно, не правильный выбор.
Некоторые другие примеры. В языке ОО на основе прототипа встроен шаблон прототипа. В языке с множественной диспетчеризацией встроен шаблон посетителя. В Ruby нет конструкторов, вы всегда используете фабричные методы без думая об этом. В основанных на делегировании языках OO встроен Шаблон Decorator. В языках с процедурами более высокого порядка встроен Шаблон Iterator. В языках без изменяемого состояния Шаблон Iterator на самом деле является Antipattern .