В чем разница между алгоритмом и шаблоном проектирования - PullRequest
21 голосов
/ 17 февраля 2009

Я искал «алгоритмы отмены / восстановления» и обнаружил что-то, помеченное как дубликат, но дубликат был запросом «Шаблон дизайна отмены». Я действительно хотел бы алгоритм для этого. Я не думаю, что мне обязательно нужен шаблон дизайна.

Есть ли принципиальное различие между "шаблоном проектирования" и "алгоритмом" или нормально, что кто-то использует их взаимозаменяемо?

Я положу трубку и заберу свой ответ с эфира.

Ладно, прости меня за мысли, что шаблоны проектирования были просто абстракциями алгоритмов. Вот небольшая таблица моих выводов из ответов, которые были очень хорошими.

   Design Pattern |    Algorithm
------------------|----------------
Abstract          | Concrete
Control Structure | Set of Actions    
Template          | Implementation
Flexible          | Deterministic
Blueprint         | Recipe

Ответы [ 12 ]

0 голосов
/ 06 августа 2014

Как организовать типы функций , а не отдельные функции могут быть ключевыми для отделения «шаблонов проектирования» от «алгоритмов» ...

Шаблоны проектирования описывают общие решения общих проблем проектирования. «Каждый шаблон описывает проблему, которая возникает снова и снова в нашей среде, а затем описывает ядро ​​решения этой проблемы таким образом, что вы можете использовать это решение миллион раз, даже не делая его одинаково. дважды "( Кристофер Александр ). В программировании это делается путем описания определенных наборов отношений между программными объектами (вместо концептуальных или реальных объектов). Следует избегать описания конкретной реализации, поскольку это делает шаблон проектирования менее универсальным.

Алгоритм - это набор шагов, которые определяют, как выполняется задача. Выполнение каждого шага в алгоритме не требует творческих навыков. Скорее, это требует только умения следовать указаниям. (предупреждение: недетерминированные алгоритмы не соответствуют этому ограничению и являются важной темой исследования)

Итак, я думаю, что одним из описаний отношений может быть отделение функций от функций. Тем не менее, совокупность признаков объекта будет определять его функцию, поскольку каждая подфункция имеет функции, инкапсулированные в нем. Когда вы объединяете много маленьких объектов в один больший объект (например, экземпляры разных классов в программе), некоторые из них будут работать вместе, чтобы создать новые функции, которых у них не было (само целое больше, чем сумма его частей ). Вы можете сказать, что это просто новый алгоритм, но это также новый объект. Особенности и функции - две стороны одной медали, поэтому невозможно полностью отделить их. Но то, как организовать типы функций , а не конкретные функции, может быть ключевым для отделения «шаблонов проектирования» от «алгоритмов», поскольку, если шаблоны проектирования предназначены для организации конкретных функций, то есть экземпляров определенных классов, алгоритм будет уже были представлены, и реализация будет всегда одинаковой, то есть она не будет общей, и вы не сможете «использовать это решение миллион раз, даже не делая его одинаково дважды».

0 голосов
/ 17 февраля 2009

Шаблон проектирования будет определять, как вы разрабатываете алгоритм (или может не иметь ничего общего с алгоритмами, но, скажем, мы имеем дело с тем, который делает), тогда как алгоритм будет представлять собой набор надежных, повторяемых, реализуемых шаги, чтобы сделать что-то. Так что нет, я бы не назвал их взаимозаменяемыми.

...