Опубликован: 12.10.2017 | Доступ: свободный | Студентов: 654 / 50 | Длительность: 07:43:00
Лекция 7:

Порождающие шаблоны проектирования

< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Аннотация: Сегодня мы перейдем к освоению группы порождающих шаблонов проектирования информационных систем. В основные обязанности шаблонов этой группы входит работа по созданию, изменению и управлению объектами информационной системы. Эту группу шаблонов будет логичным сравнить с инкубатором или заведением, востребованным в сфере высшего образования, которое готовит качественные кадры для решения задач, возникающих перед компаниями повелению современного информационного рынка. Специфика паттернов этой группы состоит в том, что они полностью абстрагируют процесс создания информационных объектов. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. При реализации шаблонов этой группы широко используется наследование, чтобы изменять наследуемый класс. Данная группа шаблонов является последней группой в приведенной нами классификации. По сути, в этой главе мы закончим рассматривать паттерны и приведем данные для окончательного формирования представления о шаблонах проектирования.

Введение

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

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

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

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

Порождающие шаблоны

Порождающие шаблоны проектирования решают задачу "простого" создания объекта без увеличения сложности структуры программного обеспечения.Решение выполняется за счет определенных механизмов контроля процесса создания объектов.

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

Паттерны данной группы скрывают в себе информацию о классах, применяемых в системе, детали механизмов создания и взаимодействия этих классов.

Единственная информация об объектах, которая должна быть известна,–это интерфейсы, определенные с помощью абстрактных классов.

Это приводит к тому, что порождающие шаблоны обеспечивают большую гибкость при решении вопроса о том, что создается, кто это создает, как и когда. Можно собрать систему из "готовых" объектов с самой различной структурой и функциональностью статически (на этапе компиляции) или динамически (во время выполнения).

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

Очень часто возникают ситуации, когда целесообразно использовать несколько шаблонов одновременно для решения одной задачи. В таких случаях они дополняют друг друга (применяя шаблон проектирования "Строитель", можно использовать и другие шаблоны для решения задачи реализации его компонентов).

Абстрактная фабрика

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

"Банда четырех" определяет назначение шаблона "Абстрактная фабрика" как "предоставление интерфейса для создания семейств связанных между собой или зависимых друг от друга объектов без указания их конкретных классов".

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

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

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

Взамен обозначенных моментов моно получить следующие преимущества:

  1. Скрываются реализации конкретных классов:
    • Шаблон помогает контролировать классы объектов, создаваемых приложением.
  2. Свободная замена семейства продуктов:
    • Класс "Конкретной фабрики" появляется в приложении только один раз– при инстанциировании. Это облегчает замену используемой приложением "Конкретной фабрики". Приложение может изменить конфигурацию продуктов, просто подставив новую "Конкретную фабрику". Поскольку "Абстрактная фабрика" создает все семейство продуктов, то и заменяется сразу все семейство.
  3. Гарантия использования только одного вида продуктов:
    • Если продукты некоторого семейства спроектированы для совместного использования, то важно, чтобы приложение в каждый момент времени работало только с продуктами единственного семейства.

Шаблон "Абстрактная фабрика" применяется, когда необходимо координировать создание информационных объектов. Главным его качеством является то, что он позволяет отделить реализацию создания экземпляров объектов от объекта, который будет использовать эти экземпляры.

Для того чтобы реализация "Абстрактной фабрики" была выполнена, необходимо следовать следующим рекомендациям:

  • Однозначно идентифицируйте правила создания экземпляров.
  • Определите абстрактный класс с интерфейсом, включающим отдельный метод для каждого из классов, экземпляры которых должны быть созданы.
  • Для каждого семейства создайте конкретные классы, производные отданного абстрактного класса.
  • Использующий экземпляры объект должен обращаться к "Абстрактной фабрике" для создания требуемых экземпляров.
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Андрей Скурихин
Андрей Скурихин
Россия, Санкт-Петербург, Санкт-Петербургский государственный электротехнический университет (ЛЭТИ), 1997
Георгий Кузнецов
Георгий Кузнецов
Россия, г. Екатеринбург