add prototype design pattern