A command is 'something' that can be executed. If a command has the concept of "done-ness", it should allow other commands to be added to it that will be run when it is done. The easiest way for this to happen is by extending AbstractCommand, then calling done() when your command is done.