interfaces
template method