add TemplateMethod Pattern