add visitor design pattern example