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

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

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

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

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

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

Ответы [ 12 ]

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

Алгоритм похож на рецепт: пошаговый процесс для выполнения некоторого действия.

Шаблон проектирования похож на план: структурированный набор объектов, ассоциаций и действий для достижения определенной цели.

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

Да, есть разница.

Алгоритм - это рецепт для выполнения некоторой задачи - однозначного конечного набора инструкций, который достигает определенной цели, работая с входом и создавая выход. Обычно алгоритм выражается в не зависящем от языка псевдокоде, который затем может быть реализован на выбранном вами языке.

A шаблон проектирования - это способ структурирования вашего кода для элегантного выражения взаимосвязи между функциональными компонентами. Вы можете использовать шаблоны проектирования в реализации алгоритма. Например, вы можете использовать алгоритм обхода дерева по порядку, чтобы обеспечить посещение всех узлов древовидной структуры данных в определенном порядке. Вы также можете реализовать шаблон проектирования visitor , чтобы выразить, как ваша реализация возвращает управление вызывающему контексту, чтобы указать, что узел был посещен. Это не часть алгоритма, а часть разработки программного обеспечения и того, как вы структурируете интерфейсы, которые может использовать каждый компонент вашего программного обеспечения.

Алгоритмы и шаблоны проектирования являются ортогональными, хотя они вполне могут быть использованы одновременно.

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

Шаблон проектирования - это относительно расплывчатое описание решения проблемы на архитектурном уровне с акцентом на гибкость и ремонтопригодность. Алгоритм - это точное описание того, как вычислить что-то конкретное, с акцентом на правильность и эффективность.

2 голосов
/ 18 февраля 2009

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

В разработке программного обеспечения шаблон проектирования - это общее повторяемое решение часто встречающейся проблемы в разработке программного обеспечения. Шаблон дизайна не является законченным проектом, который может быть преобразован непосредственно в код. Это описание или шаблон для решения проблемы, которые можно использовать в самых разных ситуациях. - SourceMaking

Кристофер Александр - архитектор, который впервые изучил шаблоны в зданиях и сообществах и разработал «язык шаблонов» для их генерации.

Каждый шаблон описывает проблему, которая возникает снова и снова в нашей среде, а затем описывает ядро ​​решения этой проблемы таким образом, что вы можете использовать это решение миллион раз, даже не делая этого, одинаково дважды - Кристофер Александр

Таким образом, термины не являются взаимозаменяемыми, поскольку они относятся к различным уровням дизайна.

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

Шаблон дизайна не может быть напрямую переведен в код. Это «стратегия», которая может быть полезна для разработки приложения. Происхождение этого термина является внешним по отношению к информатике. Читайте о Кристофер Александр , чтобы узнать больше.

Алгоритм на другой стороне может быть выражен в коде. Это последовательность операций, которая решает конкретную проблему для любого ввода.

1 голос
/ 21 августа 2012

Когда я впервые изучал концепцию шаблона проектирования, я также был удивлен, почему шаблоны проектирования были введены при наличии алгоритма. По мере того, как мои знания увеличивались с помощью шаблонов проектирования, я на этом этапе достигаю, что алгоритм - это совершенно другой подход к решению проблем, а шаблон проектирования - другой.

Шаблон проектирования - это, по сути, повторяющееся решение одной и той же проблемы для программного приложения в определенном контексте, который каким-то образом не связан с алгоритмом, поскольку алгоритм - это пошаговые инструкции для решения проблемы.

1 голос
/ 18 февраля 2009

они разные: http://en.wikipedia.org/wiki/Design_pattern_(computer_science) против http://en.wikipedia.org/wiki/Algorithm

с помощью шаблона проектирования команд (http://en.wikipedia.org/wiki/Command_pattern), легко реализовать отменить / повторить: http://www.cs.mcgill.ca/~hv/classes/CS400/01.hchen/doc/command/command.html

связанный вопрос: Шаблон проектирования для отмены двигателя

1 голос
/ 18 февраля 2009

Алгоритм - это определенный набор шагов для выполнения задачи. Для декодирования аудио или видео файла будет использоваться алгоритм.

Шаблон проектирования - это скорее шаблон для проектирования системы с определенными характеристиками.

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

Я бы сказал, что шаблон проектирования определяет структуру, тогда как алгоритм определяет поведение.

Например, вы можете использовать несколько различных алгоритмов в сочетании с шаблоном разработки стратегии .

0 голосов
/ 22 октября 2016

Шаблоны проектирования:

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

Алгоритм:

  • определенный набор шагов, которые вы можете выполнить, чтобы решить конкретную проблему.
  • реализовано непосредственно для решения конкретной проблемы.
...