То что ты описал является Командой. Принципиальная разница, видна из твоего же вопроса, передавая через конструктор, ты можешь сохранить состояние - но при этом отложить выполнение команды, когда как во втором случае ты сразу передал и сразу сделал дело. На основе первого варианта, возможно реализовать шину команд без всяких траблов. Во втором случае, если данные в метод execute будут передаваться разные, шину команд будет реализовать сложнее, возможно, но сложнее.