change undo back under command factory pattern