add Composite pattern