add template pattern
template