Вопрос на самом деле вообще не зависит от языка. На некоторых языках вы можете легко украсить классы. Но давайте придерживаться Java. Даже там я говорю "это зависит".
Очевидная вещь, которую мы хотели бы сделать, это своего рода автоматическое обнаружение обработчиков. Например, аннотируйте свои обработчики аннотацией @Handler (handles = PojoA.class), затем сканируйте все классы, аннотированные @Handler (либо грязный способ, который в основном требует загрузки файлов классов, либо использование чего-то вроде Scannotation).
Если вы работаете в таком контексте, как Spring, возникает еще более интересная опция. Вы можете получить все bean-компоненты, реализующие определенный интерфейс, например:
public interface Handler<T> {
void handle(T object);
}
и найдите их в коде вашего диспетчера:
Collection<Handler> handlers = applicationContext.getBeansofType(Handler.class).values();
for (Handler handler : handlers) {
Method handleMethod = handler.getClass().getMethod("handle", Object.class);
Class<?> type = handleMethod.getParameterTypes()[0];
register(type, handler);
}
(правда, приведенный выше код не проверен)
Я понимаю, что выхожу за границы здесь. Моя точка зрения заключается в том, что элегантность решения зависит от вашего языка выбора, внешних инструментов, которые вы хотите использовать, и того, какую среду вы используете.