init template method pattern
complete template method pattern