base implementation of Template Method Pattern