a combination of two patterns composite and visitor