add Composite Pattern