visitor, prototype, proxy