Компонентный подход в программировании



         

Каналы и фильтры - часть 2


Иногда фильтр сам требует входные данные и выдает выходные по их получении, иногда он, наоборот, может реагировать на события прихода данных на вход и требования данных на выходе. Фильтр обычно потребляет и выдает данные некоторыми порциями.

Пример структуры классов для образца каналы и фильтры

увеличить изображение
Рис. 7.7.  Пример структуры классов для образца каналы и фильтры

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

На рис. 7.7 показан пример диаграммы классов для данного образца, в котором 3 канала реализованы неявно — через вызовы операций и возвращение результатов, а один — явно. Из участвующих в этом примере фильтров источник и потребитель данных, а также Filter 1 запрашивают входные данные, Filter 3 сам передает их дальше, а Filter 2 и запрашивает, и передает данные самостоятельно.

Сценарий работы проталкивающего фильтра

Рис. 7.8.  Сценарий работы проталкивающего фильтра

Динамика. Возможны три различных сценария работы одного фильтра — проталкивание данных (push model, фильтр сам передает данные следующему компоненту, а получает их только в результате передачи предыдущего), вытягивание данных (pull model, фильтр требует данные у предыдущего компонента, следующий сам должен затребовать данные у него) и смешанный вариант. Часто реализуется только один вид передачи данных для всех фильтров в рамках системы. Кроме того, канал может буферизовать данные и синхронизовать взаимодействующие с ним фильтры. Сценарии работы системы в целом строятся в виде различных комбинаций вариантов работы отдельных фильтров.

Сценарий работы вытягивающего фильтра

Рис. 7.9.  Сценарий работы вытягивающего фильтра

Сценарий работы буферизующего и синхронизующего канала

увеличить изображение
Рис. 7.10.  Сценарий работы буферизующего и синхронизующего канала

Реализация. Основные шаги реализации следующие:




Содержание  Назад  Вперед