abstract renderer to template pattern