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