Add Visitor pattern, Command factory