#3 Composite pattern