Add composite pattern

[re composite]
Merge branch 'composite'