5

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

ответ

7

Стратегия - это обходное решение для языков, не имеющих первоклассных функций. Вы передаете объект стратегии, который решает какую-либо политику, которую вы хотите отделить от остальной части кода. Подумайте о сортировке на Java и о том, как они используют Comparators, Comparator - это объект стратегии, который позволяет вам определять политику для сортировки отдельно от алгоритма сортировки. Это позволяет вам повторно использовать код, отбрасывая различные стратегии.

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

+1

+1 для первого предложения – thepirat000

8

ИНТЕНТ отличается от деталей конструкции и реализации. Как только вы поймете эту идею, что INTENT имеет значение, тогда вы будете на правильном пути.

Understand the role of intent in design patterns

Intent for Strategy. Это поведенческий шаблон

  1. Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму варьироваться независимо от клиентов, которые его используют.
  2. Захват абстракции в интерфейсе, похороните детали реализации в производных классах.

Предназначение для абстрактной фабрики. Это шаблон создания

  1. Предоставьте интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
  2. Иерархия, которая инкапсулирует: множество возможных «платформ» и построение набора «продуктов».
+0

Хорошо то, чем то, что цель/определил, что каждый из них направлен на? i remmber, что startegy больше связан с подбором правильного алгоритма ... но не смог найти что-то, чтобы положиться на – RanZilber

0

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

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

Предположим, вы создали класс (или интерфейс) для животных, и в нем есть метод перемещения.

И вы надеетесь создать класс птиц, расширив его. Таким образом, вы добавите функции летания в метод move(). Но что происходит с пингвинами? У них будут функции ходьбы.

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

Просто мы можем создать отдельную иерархию для методов move(). Вы можете назначить связанный метод move() объекту с помощью методов setter. Таким образом, управление передается во время выполнения. Следующая диаграмма иллюстрирует этот факт;

enter image description here

Ниже приведены 2 из моих сообщений в блоге, если вы хотите, вы можете направить их для получения более подробной информации.

  1. Factory Design pattern

  2. Strategy Design pattern

+0

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

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