Pattern: Visitor, java flavour
Pattern: Interpreter, java flavour