design pattern visitor, chain responsibility