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