Command Pattern part 1
Command Pattern part 2
Command Pattern part 3