Этот вопрос довольно забавный, поскольку шаблоны проектирования происходят от в C ++. Книга GoF (Гамма, Джонсон, Хелм, Флиссидес) в Введение :
Цель этой книги - записать опыт проектирования объектно-ориентированного программного обеспечения как шаблоны проектирования . Каждый шаблон проектирования систематически называет, объясняет и оценивает важный и повторяющийся дизайн в объектно-ориентированных системах. Наша цель - собрать опыт проектирования в форме, которую люди могут эффективно использовать. С этой целью мы задокументировали некоторые из наиболее важных шаблонов проектирования и представили их в виде каталога.
и затем в Что такое шаблон проектирования :
Хотя шаблоны проектирования описывают объектно-ориентированные разработки, они основаны на практических решениях, которые были реализованы в основных объектно-ориентированных языках программирования, таких как Smalltalk и C ++, а не в процедурных языках (Pascal, C, Ada) или более динамических объектно-ориентированных языки (CLOS, Dylan, Self). Мы выбрали Smalltalk и C ++ по прагматическим соображениям: наш повседневный опыт работы на этих языках и они становятся все более популярными.
Кроме того, шаблоны проектирования подвергались критике на том основании, что они являются просто идиомами, прославленными, чтобы скрыть этот факт. Критики (извините, нет источников) говорят, что DP просто восполняют отсутствие прямой языковой поддержки. Это определенно правильно, по крайней мере, до определенной степени: посмотрите, как встроенная поддержка Scala для Singleton исключает public static getInstance()
, или вспомните, что Visitor просто имитирует двойную отправку.
Я думаю, что понятие DP как идиомы реализации так же полезно, как и обычная интерпретация (заглавная D esign). Во-первых, мы должны признать, что разные языки требуют разных подходов, и позиция DP с большим бровем определенно не помогает. Во-вторых, общий словарь методов реализации, специфичный для каждого языка, так же важен, как и, возможно, кросс-языковой словарь подходов к проектированию.