Когда использовать абстрактный шаблон фабрики?

I ' Я пытаюсь кратко описать , когда использовать фабрику, как для себя, так и для моей команды. Я наткнулся на следующие связанные вопросы, которые несколько помогли:

На основе этих ссылок и множества других из других источников (перечисленных внизу) я придумал следующее:

Когда использовать абстрактный шаблон фабрики:

  • когда вы используете интерфейс var или '
    • например, пользователь user = new ConcreteUserImpl ();
  • и код, который вы пишете, должен быть тестируемым / расширяемым в какой-то момент

Объяснение:

  • интерфейсы по самой своей природе подразумевают множественные реализации (хорошо для модульного тестирования)
  • переменные интерфейса подразумевают OCP- и LSP- совместимый код (поддержка подклассов)
  • использование оператора 'new' нарушает OCP / DI, потому что сильно связанные классы трудно тестировать или изменять

«Могу ли я создать фабрику для каждого типа объекта? чрезмерно. "

  • нет, у вас может быть одна (или несколько) фабрик, которые производят множество (обычно связанных) типов объектов
  • , например appFactory.createUser (); appFactory.createCatalog (); и т. д.

Когда НЕ использовать фабрику:

  • новый объект очень простой и вряд ли будет подклассифицирован
    • например, List list = new ArrayList ();
  • новый объект не интересно тестировать
    • не имеет зависимостей
    • не выполняет релевантной или длительной работы
    • например, Logger log = new SimpleLogger ();

Ссылки:


Мой вопрос: является ли мое резюме точным и имеет ли оно смысл? Я что-то упустил?

Заранее спасибо.

18
задан Community 23 May 2017 в 12:00
поделиться