В чем разница между шаблоном разработки стратегии и абстрактным шаблоном фабрики? - PullRequest
5 голосов
/ 07 февраля 2011

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

Ответы [ 3 ]

8 голосов
/ 07 февраля 2011

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

Понимание роли намерения в шаблонах проектирования

Намерение для стратегии . Это поведенческая модель

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

Намерение для абстрактной фабрики . Это творческий паттерн

  1. Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
  2. Иерархия, которая заключает в себе: множество возможных «платформ» и построение набора «продуктов».
7 голосов
/ 08 февраля 2011

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

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

0 голосов
/ 07 сентября 2012

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

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

Допустим, вы создали класс Animal (или интерфейс) и у вас есть метод move.

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

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

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

enter image description here

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

  1. Шаблон фабричного дизайна

  2. Шаблон стратегии проектирования

...