Если вы посмотрите как на несколько объектов, так почему у нас есть два шаблона для одной вещи? В чем разница между ними? Я посмотрел их обоих в книге «Банда четырех».Стратегия похожа на Factory?
ответ
Если вы изучили книгу GoF, изучите разницу в Creational и Operational pattern. Также см. What is the difference between Factory and Strategy patterns?
Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить здесь основные части ответа и предоставить ссылку для справки. –
Спасибо, куншан и Ян Дворжак. Я понял разницу, и я больше копаю на ней. Будет приветствоваться большее искупление. – user2925225
Я удивлен, что этот вопрос возникает так часто, поскольку Factory и Strategy находятся в двух разных категориях целиком. Фабрика является творческой; Стратегия функционирует. Мне не нужно объяснять, так как легенда переполнения стека @tvanfosson создала этот отличный post по этому вопросу.
Помните также, что эти два сосуда могут сосуществовать одновременно. У вас может быть завод, который создает стратегии, которые могут быть введены в класс.
Более интересный вопрос заключается в различии между стратегией и Template Method, двумя аналогичными шаблонами, которые отличаются одним существенным способом. Это доходит до всего обсуждения наследования и делегирования, что очень хорошо для разработчиков OO.
Некоторые основные моменты: ИМО хорошо сказал, что @Vidya Factory - это просто подход к развязыванию зависимых объектов, от которых зависит экземпляр. Находясь в Factory, во время создания можно использовать стратегию, чтобы выбрать «время выполнения» среди стратегий создания. – khunshan
Я думаю, что путаница происходит из-за того, что оба имеют тенденцию использовать интерфейсы для выполнения задания. Говоря языком, вы можете реализовать завод с шаблоном стратегии. –
Второй момент, безусловно, верно. Поскольку они делают разные вещи, они могут сосуществовать в любом случае. Но интерфейсы являются огромной частью всех шаблонов. – Vidya
Вы не можете понять разницу, просто взглянув на код или категоризацию. Чтобы правильно понять шаблоны GoF, найдите их цели:
Стратегия: «Определите семейство алгоритмов, инкапсулируйте их и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму независимо варьироваться от клиентов, которые его используют».
Factory Method: «Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс следует создавать. Factory Method позволяет кластеру отложить экземпляр к подклассам».
А вот объяснение о них: Difference between Factory Method and Strategy design patterns
- 1. Библиотека PHP похожа на GD
- 2. На что похожа моя страница?
- 3. Квадратная область похожа на CLRegion
- 4. жеребьевку земли похожа на Feller
- 5. Библиотека C# похожа на HtmlUnit
- 6. PHP Перегрузка похожа на sprintf()?
- 7. система управления контентом похожа на
- 8. Задача похожа на счастливое число
- 9. Устанавливаемая CMS похожа на CushyCMS?
- 10. Фоновая подстройка похожа на Movavi
- 11. анимация перехода на страницу похожа на Medium.com
- 12. Средняя функция на Java - похожа на VB?
- 13. Factory/Abstract Factory confusion
- 14. Угловой сервис Factory Factory
- 15. Стратегия изображения на Android
- 16. Стратегия разбивки на страницы
- 17. Primefaces DataTable Сортировка не похожа на работу
- 18. Сортировка похожа на домашнюю страницу youtube
- 19. Android: Функция похожа на filterArrayUsingPredicate в iOS
- 20. Назад ссылка не похожа на работу
- 21. Рамка похожа на Adobe Flex с HTML5
- 22. Любая инфраструктура PHP Rest похожа на Recess?
- 23. Javascript (JQuery) функциональность похожа на Linq, где()
- 24. Spring MVC аннотация @RequestAttribute похожа на @RequestParam
- 25. Создание сферы, которая похожа на Землю
- 26. Библиотека графики Haskell похожа на MATLAB
- 27. Панель приборов TFS похожа на JIRA
- 28. функциональность похожа на twitter с помощью codeigniter
- 29. C# gzipstream декомпрессия больше похожа на депрессию
- 30. Facebook API - Аутентификация похожа на Hootsuite
возможно дубликат [? В чем разница между паттернами Factory и стратегии] (http://stackoverflow.com/questions/616796/what-is-the-difference - между-фабрично-стратегическими шаблонами) – wheaties
Я предпочитаю не подчеркивать этого. Язык OO, и особенно Java, имеет только столько конструкций, которые вы можете использовать, когда ** реализуете ** шаблон - вы не можете развестись, как они выглядят в коде (где обязательно будет перекрываться) из их контекста и что они 're used for. (Что не относится к нескольким объектам). С другой стороны спектра у вас есть языки с функциями функционального программирования, где многие из этих шаблонов становятся невидимыми (http://norvig.com/design-patterns/ design-patternss.pdf) - фабрики, стратегии и команды могут быть реализованы с использованием lambdas. – millimoose