add Command Pattern and Command Interface