Apply Iterator & Strategy Pattern
Apply Visitor Pattern (create PrintVisitor)