Template Method pattern