Какова форма выбора одной реализации из нескольких доступных реализаций?
Имеет смысл иметь несколько реализаций одновременно.
Так же, какпример:
interface ImageFilter {
String getName();
String getDescription();
String getUsage();
List<Parameter> getParameters();
Image apply(Image image, List<Parameters> parameters);
}
Теперь ваша программа (служба, библиотека, ...) может работать с любым типом фильтра изображений, даже если он установлен после вашей программы.
Насколько я могу судить, порядок итераций
Вам просто нужно выполнить итерацию, чтобы узнать, какие реализации доступны, но вам не нужно использовать их немедленно.В примере с фильтром изображения вы должны выполнить итерацию, чтобы показать их в селекторе (например, используя getName
), а пользователь выберет один для применения (apply
), см. Подробную информацию (getDescription
), использование, параметры,...
Но это только примеры, есть много других возможных сценариев (например, для расчета вы можете запустить все реализации параллельно и посмотреть, какая из них заканчивается раньше, или взять ту, которая достиглалучшая точность, ... или вы можете основывать выбор реализации на определенных аннотациях кода, ...).
С другой стороны, запись META-INF/services
- это только один способ внедрить доступные реализациисм. Создание расширяемых приложений для получения подробной информации.