Да, с ТЗ всем будет лучше. =(

Ваша программа написана в сурово императивном стиле. Это не Java-way.

Надо, чтобы в классе шелла (у вас это Listener) была только логика приема команд от пользователя и перенаправления этих команд соответствующим исполнителям. При этом желательно, чтобы исходные коды исполнителей были изолированы друг от друга по мере возможностей.

Кроме того, надо иметь ввиду, что в будущем у вас может быть несколько объектов шелла в одной JVM.