Рефакторинг под шаблоны. Код создания

Впервые я понял, что есть такая штука, как рефакторинг, когда представился на сайте refactoring.guru. Сам по себе рефакторинг - это процесс улучшения существующего кода без нарушения его логики, то есть очистки кода. Чистый код легко понять, поддерживать, расширять и т. Д. Если вы когда-нибудь слышали о таких вещах, как методы составления, встроенные методы, извлечение класса и т. д., то это разновидности рефакторинга.

С другой стороны, рефакторинг - это родственный продукт, и это шаблоны проектирования. Паттерны проектирования призваны помочь нам не изобретать велосипед заново при создании программного обеспечения. Всегда есть общие шаблоны для решения той или иной проблемы. Они проверены временем, широко известны среди программистов и т. Д.

Недавно я купил книгу Джошуа Кериевского «Рефакторинг под шаблоны». Он включает в себя как рефакторинг, так и элементы шаблонов проектирования, а также учит, как (когда, почему) реорганизовать существующий код в соответствии с определенными подходящими шаблонами.

Итак, я начинаю писать серию статей по книге, первая из которых посвящена творчеству.

I. Создание

Список рефакторинга в этой главе следующий:

  • Замените конструкторы методами создания.
  • Представляем полиморфное создание с фабричным методом
  • Перенесите знания о создании на фабрику
  • Инкапсулируйте классы с фабрикой
  • Инкапсулируйте композит с помощью Builder
  • Встроенный синглтон

Заменить конструкторы методами создания

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

Если вы не знаете, что такое метод создания, то для создания экземпляра объекта используется статический или нестатический метод.

Ниже приведен пример. Перед рефакторингом под шаблон:

После рефакторинга под шаблон:

Хотя это очень полезный рефакторинг, есть несколько альтернатив:

  • Смешивание методов создания и конструкторов, выделение методов создания для популярной конфигурации класса и оставление общедоступного конструктора для других.
  • Добывающая фабрика. Если основная функциональность вашего класса перегружена методами создания, добавляющими дополнительную сложность, вы можете переместить методы создания в отдельный фабричный класс. Это дело вкуса. Продолжение следует…