template method pattern