http://techiworks.com/composite-pattern/