Какой шаблон дизайна использовать стратегию или фабричный дизайн? - PullRequest
1 голос
/ 01 апреля 2019

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

В настоящее время я реализовал шаблон стратегии. Но некоторые из моих друзей внедряют шаблон фабричного дизайна. Мне просто нужно подтверждение для того же.

Это проблема:

Предположим, вы работаете в новом стартапе, где вы создали коллекцию специализированных алгоритмов. Интерфейс каждого алгоритма четко определен с точки зрения ввода и вывода алгоритма. Например:

// Class: AlgorithmFn1
public java.util.List compute(java.util.Map<String, Float> data)

// Class: AlgorithmFn2
public java.util.Map<String, Integer> compute(java.util.Collection data)

и т. Д. *

Стартап планирует продавать эти специализированные алгоритмы в виде библиотек (файл .jar) своим организациям-клиентам для использования в своих программных приложениях. Внутренняя реализация этих алгоритмов продолжает развиваться, не затрагивая интерфейсы алгоритмов.

Вам необходимо реализовать подходящий набор классов (в Java), которые могут использоваться организациями-клиентами для:

Получение новых экземпляров конкретных классов, которые реализуют соответствующие алгоритмы.

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

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Стратегия будет заключаться в выборе между несколькими различными алгоритмами с одним и тем же API во время выполнения, но это назначение не звучит так. Пара аргументов в пользу Фабрики:

  • API-интерфейсы алгоритмов различны

  • Это

    Получение новых экземпляров конкретных классов, которые реализуют соответствующие алгоритмы.

  • А это:

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

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

0 голосов
/ 01 апреля 2019

Фабрика производит что-то, что соответствует интерфейсу (или суперклассу), но с реализацией, которая может варьироваться.Похоже, это соответствует идее «реализации продолжают развиваться».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...