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

  • творческий
  • Структурный
  • Поведенческий

В этой статье мы рассмотрим творческие шаблоны проектирования.

ОБЗОР:

Порождающие шаблоны проектирования относятся к тому, как объекты создаются из классов. Создание новых объектов может показаться тривиальным, но необдуманное засорение кода созданием экземпляров объектов может привести к головной боли в будущем. Шаблон созидательного проектирования содержит мощные предложения о том, как лучше всего инкапсулировать процесс создания объекта в программе. Ниже приведены различные типы креативных шаблонов проектирования.

АБСТРАКТНЫЙ ФАБРИЧНЫЙ УЗОР:

Шаблон Abstract Factory используется, когда у вас есть группа объектов, которые необходимо создать, и вы не хотите указывать класс объекта, который будет создан до выполнения. Этот шаблон предоставляет интерфейс для создания семейств связанных объектов без указания их конкретных классов.

Например, представьте, что вы пишете программу, которой нужно создать несколько разных типов окон. Вы можете создать абстрактный фабричный класс с именем WindowFactory и содержать в нем метод createWindow(). Этот метод вернет экземпляр одного из нескольких конкретных подклассов Window, таких как JFrame, JDialog или JWindow.

Наивному читателю может показаться, что паттерн фабричный метод и абстрактный фабричный шаблон похожи. Разница между ними заключается в их мотивах. Шаблон фабричного метода обычно отвечает за создание одного продукта, тогда как абстрактный шаблон фабрики создает целые семейства связанных продуктов. Кроме того, в паттерне фабричный метод мы используем наследование для создания более специализированных продуктов, тогда как в абстрактном фабричном шаблоне мы практикуем композицию объектов, передавая фабрики, которые используются для создания желаемых продуктов.

ШАБЛОН СТРОИТЕЛЯ:

Шаблон Builder используется, когда у вас есть сложный объект, который необходимо построить в несколько шагов. В этом шаблоне используется отдельный конструктор, позволяющий создавать объекты с несколькими шагами.

Например, представьте, что вы пишете программу, которой необходимо создать пользовательский интерфейс. Пользовательский интерфейс состоит из окна и нескольких кнопок внутри окна. Вы можете создать класс строителя с именем UIBuilder. Класс UIBuilder будет иметь метод buildWindow(), создающий окно, и метод buildButton(), создающий кнопку.

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

ЗАВОДСКОЙ МЕТОД ШАБЛОН:

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

Например, представьте, что вы пишете программу, которой нужно создать несколько разных типов окон. Вы можете определить интерфейс для создания окон под названием WindowFactory. Затем вы можете создать фабричный класс с именем JFrameFactory, который реализует интерфейс WindowFactory. Класс JFrameFactory будет содержать метод createWindow(), возвращающий экземпляр подкласса JFrame.

Шаблон может привести к слишком большому количеству подклассов с очень незначительными различиями. Если подкласс расширяет функциональность, то суперкласс не может ее использовать, пока не приведет ее к конкретному типу. Приведение вниз может завершиться ошибкой во время выполнения.

ОДИНОЧНЫЙ ШАБЛОН:

Шаблон Singleton используется, когда вы хотите ограничить создание экземпляра класса одним объектом. Этот шаблон ограничивает создание экземпляра класса одним объектом.

Например, представьте, что вы пишете программу, которой нужно создать несколько разных типов окон. Вы можете создать одноэлементный класс с именем WindowManager. Класс WindowManager будет иметь метод getWindow(), который будет возвращать экземпляр желаемого подкласса Window. Если экземпляра этого класса не существует, метод getWindow() создаст его.

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

ШАБЛОН ПРОТОТИПА:

Шаблон прототипа используется, когда вы хотите клонировать существующий объект. Этот шаблон создает новый объект путем клонирования существующего.

Например, представьте, что вы пишете программу, которой необходимо создать пользовательский интерфейс. Пользовательский интерфейс состоит из окна и нескольких кнопок внутри окна. Вы можете создать класс-прототип с именем UIPrototype. Класс UIPrototype будет иметь метод clone(), который создаст копию объекта UIPrototype.

Шаблон прототипа также помогает при динамической загрузке классов. Языковые платформы, допускающие динамическую загрузку, создадут экземпляр загруженного класса и зарегистрируют его в управляющем объекте. Приложение может во время выполнения запросить объект загруженного класса у менеджера. Обратите внимание, что приложение не может получить статический доступ к конструктору класса.

Надеюсь, статья даст вам обзор творческих шаблонов проектирования, я расскажу о других шаблонах проектирования и углублюсь в них. Дайте мне знать ваши мысли о статьях, ура!