add command pattern
Command Pattern