Umożliwia wydzielenie zadań powiązanych logicznie ze sobą do osobnej klasy zwanej odwiedzającym. Odwiedzający może posiadać wiele implementacji zapewniając tym samym możliwość wykonania wielu różnych zadań. Dodawanie nowych zadań odbywa się bez ingerencji w elementy już oprogramowane.