Шаблонный метод и стратегия разработки шаблонов - PullRequest
8 голосов
/ 13 июня 2009

Это, вероятно, вопрос новичка, так как я новичок в разработке шаблонов, но я смотрел на Template Method и Strategy DP, и они кажутся очень похожими. Я могу прочитать определения, изучить UML и примеры кода, но мне кажется, что шаблон «Стратегия» просто использует шаблон «Шаблонный метод», а вам просто приходится передавать его в объект и (объект).

И в этом отношении шаблонный метод выглядит так, будто это просто базовое наследование ОО.

Я упускаю какой-то ключевой аспект их различий? Я что-то упускаю в методе шаблонов, который делает его больше, чем просто базовое наследование?

Примечание: есть предыдущий пост по этому вопросу ( 672083 ), но больше о том, когда его использовать, что помогает мне получить его немного больше, но я хочу подтвердить свои мысли о самих шаблонах ,

Ответы [ 2 ]

10 голосов
/ 13 июня 2009

В основном все сводится к семантике. Паттерн стратегии позволяет вам передать определенный алгоритм / процедуру (стратегию) другому объекту, который будет его использовать. Метод шаблона позволяет вам переопределять определенные аспекты алгоритма, в то же время сохраняя некоторые его аспекты одинаковыми (сохраняйте порядок одинаковым, и есть вещи, которые всегда выполняются в начале и в конце, например ... «шаблон») в то время как наследование - это способ моделирования отношений «IS-A» в моделях данных.

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

1 голос
/ 21 февраля 2015

Стратегия шаблон проектирования
предоставляет способ обмена алгоритма объекта динамически во время выполнения
(через композицию объектов).

Например, расчет цен в системе обработки заказов.
Чтобы рассчитать цены по-разному, могут поддерживаться различные алгоритмы ценообразования так что какой алгоритм использовать можно выбрать (ввести) и динамически обмениваться во время выполнения.

Шаблон Метод дизайн шаблона
обеспечивает способ переопределить некоторые части поведения класса статически во время компиляции
(через подклассы).

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

...