update visitor design pattern