O padrão de projeto utilizado para definir um esqueleto de um algoritmo em uma classe base, deixando que as subclasses implementem os detalhes específicos, é conhecido por