Implemented Visitor Pattern