Это скорее вопрос проектирования, чем вопрос графики, но здесь есть немного предыстории: я пишу программу, использующую OpenGL (на Java, с JOGL), которая может загружать сетку из файла .obj и отображать ее,Пока проблем нет, но мне нужно иметь возможность применить серию фильтров или преобразований к сетке, например,
- Тесселяция граней
- Добавление случайного шума в вершины
- Применение алгоритма сглаживания к зашумленной сетке
- Раскраска сетки (которая может основываться или не основываться как на сглаженной сетке, так и на исходной чистой сетке)
Несколькоиз этих фильтров будут применяться по порядку.Я также хочу предоставить какой-то согласованный интерфейс для других людей, чтобы они могли создавать свои собственные (возможно, общие) фильтры.Как бы я поступил об этом?
Основная проблема заключается в том, что для фильтров может потребоваться различный набор параметров, например, для одного алгоритма сглаживания может потребоваться выбор двух параметров пользователем (во время выполнения с использованием графического интерфейса пользователя),тогда как другой может не требовать ничего.Точно так же некоторые алгоритмы окраски могут требовать только сглаженную сетку и цвет RGB, другой может потребовать как сглаженную сетку, так и чистую сетку (из которой он генерирует цвета).Поэтому вызов может выглядеть следующим образом:
mesh = smoothingFilter1.filter(mesh, booleanParam);
, но он может быть совершенно другим:
mesh = smoothingFilter2.filter(mesh, intParam1, intParam2, floatParam);
Очевидно, мой код должен быть способен вызывать общий метод фильтрации.Было бы хорошей идеей определить абстрактный класс или интерфейс для Filter
с нереализованным методом регистрации себя (и его обязательных параметров) с каким-то управляющим классом?Кажется довольно сложным, но я не могу придумать другого способа заставить программу работать с методом фильтра с произвольной сигнатурой.Я даже не уверен, что эта идея сработает ...
Существует ли шаблон проектирования для обработки ситуаций такого типа?