Template Method Pattern