rewrite Composite pattern.

discard the use of curiously recurring template pattern (CRTP).
for it's difficult to control the behavier of inheritanced classes.