add prototype pattern
add prototype pattern