simple command pattern impl