Шаблон проектирования программного обеспечения, связанный с созданием объектов
В разработке программного обеспечения шаблоны творческого проектирования — это шаблоны проектирования , которые связаны с механизмами создания объектов и пытаются создавать объекты способом, подходящим для конкретной ситуации. Базовая форма создания объекта может привести к проблемам с проектированием или усложнить проект. Шаблоны творческого проектирования решают эту проблему, каким-то образом управляя созданием объекта.
Обзор
Шаблоны творческого проектирования состоят из двух доминирующих идей. Один из них — это инкапсуляция знаний о том, какие конкретные классы использует система. Другой — скрыть, как создаются и комбинируются экземпляры этих конкретных классов. [1]
Шаблоны творческого проектирования подразделяются на шаблоны создания объектов и шаблоны создания классов, где шаблоны создания объектов связаны с созданием объектов, а шаблоны создания классов — с созданием экземпляров классов. Более подробно, шаблоны создания объектов перекладывают часть создания объекта на другой объект, тогда как шаблоны создания классов откладывают создание объекта на подклассы. [2]
Пять широко известных шаблонов проектирования, которые являются частями творческих шаблонов:
абстрактный шаблон фабрики , который предоставляет интерфейс для создания связанных или зависимых объектов без указания конкретных классов объектов. [3]
шаблон строителя , который отделяет построение сложного объекта от его представления, так что один и тот же процесс построения может создавать разные представления.
Шаблон фабричного метода , который позволяет классу отложить создание экземпляра до подклассов. [4]
Шаблон прототипа , который определяет тип объекта, который необходимо создать с использованием экземпляра прототипа, и создает новые объекты путем клонирования этого прототипа.
шаблон Singleton , который гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему. [5]
Определение
Создающие шаблоны направлены на то, чтобы отделить систему от того, как ее объекты создаются, составляются и представляются. Они повышают гибкость системы в отношении того, что, кто, как и когда создает объекты.[6]
Применение
Поскольку современная разработка программного обеспечения больше зависит от композиции объектов , чем от наследования классов, акцент смещается от жесткого кодирования поведения к определению меньшего набора базовых поведений, которые можно объединить в более сложные. [7] Поведения жесткого кодирования негибкие, потому что они требуют переопределения или повторной реализации всего этого, чтобы изменить части дизайна. Кроме того, жесткое кодирование не способствует повторному использованию и затрудняет отслеживание ошибок. По этим причинам творческие шаблоны более полезны, чем жестко запрограммированные модели поведения. Шаблоны создания делают дизайн более гибким. Они предоставляют различные способы удаления явных ссылок в конкретных классах из кода, который должен их создать. [8] Другими словами, они создают независимость для объектов и классов.
Рассмотрите возможность применения творческих шаблонов, когда:
Система должна быть независимой от того, как создаются ее объекты и продукты.
Набор связанных объектов предназначен для совместного использования.
Скрытие реализаций библиотеки классов или продукта, отображение только их интерфейсов.
Построение различных представлений независимых сложных объектов.
Класс хочет, чтобы его подкласс реализовал создаваемый им объект.
Экземпляры классов указываются во время выполнения.
Должен быть один экземпляр, и клиент может получить доступ к этому экземпляру в любое время.
Экземпляр должен быть расширяемым без изменений.
Состав
Диаграмма классов Creational Pattern.
Ниже представлена простая диаграмма классов, общая для большинства шаблонов создания. Обратите внимание, что разные творческие модели требуют дополнительных и разных участвующих классов.
Некоторые примеры творческих шаблонов проектирования включают в себя:
Шаблон «Абстрактная фабрика» : класс запрашивает необходимые ему объекты из объекта фабрики вместо того, чтобы создавать объекты напрямую.
Шаблон фабричного метода : централизуйте создание объекта определенного типа, выбрав одну из нескольких реализаций.
Шаблон Builder : отделите построение сложного объекта от его представления, чтобы один и тот же процесс построения мог создавать разные представления.
Шаблон внедрения зависимостей : класс принимает необходимые ему объекты из инжектора вместо того, чтобы создавать объекты напрямую.
Шаблон ленивой инициализации : тактика отсрочки создания объекта, вычисления значения или другого дорогостоящего процесса до тех пор, пока он не понадобится в первый раз.
Шаблон пула объектов : избегайте дорогостоящего приобретения и высвобождения ресурсов путем переработки объектов, которые больше не используются.
Шаблон прототипа : используется, когда тип создаваемых объектов определяется экземпляром прототипа, который клонируется для создания новых объектов.
Шаблон Singleton : ограничить создание экземпляра класса одним объектом.