Курсовые - Организация работы деканата

Шаблон проектирования практических задач

5. ШАБЛЛОН ПРОЕКТИРОВАНИЯ ПРАКТИЧЕСКИХ ЗАДАЧ


 

Помимо шаблона проектирования MVC в программе используется ещё один не менее популярный шаблон - «Абстрактная фабрика».

Паттерн (шаблон) проектирования — это продуманный способ построения исходного кода программы для решения часто возникающих в повседневном программировании проблем проектирования. Иными словами, это уже придуманное решение, для типичной задачи. При этом, паттерн не готовое решение, а просто алгоритм действий, который должен привести к желаемому результату. Один из наиболее часто используемых порождающих паттернов — Абстрактная фабрика (Abstract Factory).

Существует три вида паттернов проектирования:

  • Порождающие паттерны позволяют выполнять инициализацию объектов наиболее удобным и оптимальным способом;

  • Структурные паттерны описывают взаимоотношения между различными классами или объектами, позволяя им совместно реализовывать поставленную задачу;

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

Абстрактная фабрика (Abstract Factory) – это порождающий паттерн, предоставляющий возможность создания семейства взаимосвязанных или родственных объектов, не специфицируя их классов. То есть, определяется интерфейс для создания взаимосвязанных объектов, без необходимости реализации конкретных классов.

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

Аналогично примеру с группами существ, в программе паттерн работает с классами таблиц базы данных. Базовый абстрактный класс — BaseDbTable, и в нем определяются все методы, характерные для класса модели таблицы данных – методы отправки данных в базу данных (writeData()), методы чтения (readData()), удаление (deleteRow()) и т.д. Общие признаки таблицы данных, такие как название таблицы в базе данных, с которой будет взаимодействовать какой-либо наследник класса (dbTableName()), количество столбцов (columnCount). Помимо этого, будут определены все заголовки методов, которые уже в каждой разновидности модели таблицы данных будут свои – методы получения значения какого-либо столбца записи по номеру строки и номеру столбца, или генерация данных для формы ввода, сколько и каких полей ввода нужно будет создавать.

Вторая абстрактная фабрика — семейство классов BaseDbRow. Аналогично фабрике моделей таблиц данных, данное семейство классов представляет конкретную строку в таблице данных. Содержатся общие для всех строк черты — количество столбцов (roleCount), а так же объявление методов - сборка данных строки для вставки в базу данных (buildForInsert()), сборка данных строки для обновления строки в базе данных (buildForUpdate]()), метод получения значения поля, что является первичным ключём (getPrimaryKeyValue()) и ряд других методов.

Эти две фабрики взаимодействуют между собой. В классе BaseDbTable есть поле — records – это коллекция строк таблицы, она состоит из объектов BaseDbRow, это значит, что данную коллекцию каждый наследник класса BaseDbTable может заполнить нужными ему строками — наследниками класса BaseDbRow.

Часть диаграммы классов, на которой можно увидеть, как наглядно выглядит шаблон «Абстрактная фабрика» в иерархии классов программы представлена на рисунке 5.1. На диаграмме видно, что основное поведение наследников классов BaseDbTable и BaseDbRow определено в базовых классах. А так же, что каждому классу модели таблицы соответствует класс представляющий строку этой таблицы и они связаны композицией — то есть класс строки является атрибутом класса модели таблицы.


 

Рисунок 5.1 – Часть диаграммы классов


 

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

Во вторых — удобство расширения функциональности классов и исправления ошибок. Поскольку поведение классов определенно в базовом, если вдруг потребуется, например, изменить базовый алгоритм сортировки записей в модели, то не нужно будет менять код во всех моделях — достаточно будет изменить метод sort () класса BaseDbTable, аналогичная ситуация с исправлением неполадок.

В третьих, использование шаблона серьезно расширяет возможности программирования. Например, в программе есть класс, реализующий форму ввода — InputForm. Данный класс предназначен для автоматической генерации формы ввода данных, исходя из того, какой объект был задан в конструкторе. Если бы не использовалась абстракция, то пришлось бы создавать для каждой таблицы отдельную форму ввода, и у каждой в качестве поля класса ставить объект, представляющий строку нужного вида. Однако, используя шаблон, появляется возможность создать одну форму ввода с полем абстрактного типа (поле result). А затем, при создании объекта формы генерировать её содержимое с помощью данных из конкретной реализации класса BaseDbRow.


 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться