add Command Design Pattern