add Prototype pattern