Вот рабочий код (java + spring 3) удовлетворяющий выше-перечисленным требованиям
загрузить
результат работы (консоль)
=== test DataType1
Command1 process DataType1
=== test DataType2
Command1 process DataType2
Command2 process DataType2
=== test DataType3
Command1 process DataType3
Command3 process DataType3
соответствие между типами данных наборами команд обработки настраиваются в файле конфигурации spring-config.xml без необходимости пере-компиляции кода.
при необходимости можно сделать расширение функциональности добавлением новых библиотек с типами данных и командами.
вопрос в образовательных целях, какие шаблоны в нем использованы?