composite_pattern