template method & strategy method