2013-10-27 7 views
0

Если вы посмотрите как на несколько объектов, так почему у нас есть два шаблона для одной вещи? В чем разница между ними? Я посмотрел их обоих в книге «Банда четырех».Стратегия похожа на Factory?

+0

возможно дубликат [? В чем разница между паттернами Factory и стратегии] (http://stackoverflow.com/questions/616796/what-is-the-difference - между-фабрично-стратегическими шаблонами) – wheaties

+0

Я предпочитаю не подчеркивать этого. Язык OO, и особенно Java, имеет только столько конструкций, которые вы можете использовать, когда ** реализуете ** шаблон - вы не можете развестись, как они выглядят в коде (где обязательно будет перекрываться) из их контекста и что они 're used for. (Что не относится к нескольким объектам). С другой стороны спектра у вас есть языки с функциями функционального программирования, где многие из этих шаблонов становятся невидимыми (http://norvig.com/design-patterns/ design-patternss.pdf) - фабрики, стратегии и команды могут быть реализованы с использованием lambdas. – millimoose

ответ

0

Если вы изучили книгу GoF, изучите разницу в Creational и Operational pattern. Также см. What is the difference between Factory and Strategy patterns?

+3

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить здесь основные части ответа и предоставить ссылку для справки. –

+0

Спасибо, куншан и Ян Дворжак. Я понял разницу, и я больше копаю на ней. Будет приветствоваться большее искупление. – user2925225

0

Я удивлен, что этот вопрос возникает так часто, поскольку Factory и Strategy находятся в двух разных категориях целиком. Фабрика является творческой; Стратегия функционирует. Мне не нужно объяснять, так как легенда переполнения стека @tvanfosson создала этот отличный post по этому вопросу.

Помните также, что эти два сосуда могут сосуществовать одновременно. У вас может быть завод, который создает стратегии, которые могут быть введены в класс.

Более интересный вопрос заключается в различии между стратегией и Template Method, двумя аналогичными шаблонами, которые отличаются одним существенным способом. Это доходит до всего обсуждения наследования и делегирования, что очень хорошо для разработчиков OO.

+1

Некоторые основные моменты: ИМО хорошо сказал, что @Vidya Factory - это просто подход к развязыванию зависимых объектов, от которых зависит экземпляр. Находясь в Factory, во время создания можно использовать стратегию, чтобы выбрать «время выполнения» среди стратегий создания. – khunshan

+0

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

+0

Второй момент, безусловно, верно. Поскольку они делают разные вещи, они могут сосуществовать в любом случае. Но интерфейсы являются огромной частью всех шаблонов. – Vidya

0

Вы не можете понять разницу, просто взглянув на код или категоризацию. Чтобы правильно понять шаблоны GoF, найдите их цели:

Стратегия: «Определите семейство алгоритмов, инкапсулируйте их и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму независимо варьироваться от клиентов, которые его используют».

Factory Method: «Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс следует создавать. Factory Method позволяет кластеру отложить экземпляр к подклассам».

А вот объяснение о них: Difference between Factory Method and Strategy design patterns

Смежные вопросы