add Template Method Pattern