Imagem de fundo

Considere a classe Java abaixo.public abstract class...

Considere a classe Java abaixo.


public abstract class VendaIngresso {


public void encerraVenda(String espetaculo, String assento) {

double valor = calculaValorIngresso();

confirmaPagamento(valor);

imprimeIngresso();

}


protected void imprimeIngresso() {

// implementação irrelevante para resolver a questão

}


protected void confirmaPagamento(double valor) {

// implementação irrelevante para resolver a questão

}


protected abstract double calculaValorIngresso();

}


Ela contém métodos que implementam o processo de venda de ingressos para espetáculos culturais. Entre eles está o método de encerramento de uma venda, que é composto de três etapas. São elas:


• o cálculo do valor do ingresso;

• a confirmação do pagamento;

• a impressão do ingresso.


As duas últimas etapas independem da natureza de quem está comprando um ingresso, por isso foram implementadas diretamente na classe VendaIngresso. A 1ª etapa, entretanto, não pôde ser implementada nessa classe, pois o valor de um ingresso pode variar de acordo com o tipo de comprador (estudante, idoso, pessoa com deficiência, dentre outros). Por isso, o método calculaValorIngresso é abstrato.


Uma 2ª classe, que implementa a venda de ingressos para estudantes, é mostrada a seguir.


public class VendaIngressoEstudante extends VendaIngresso {

protected double calculaValorIngresso() {

// implementação irrelevante para resolver a questão

}

}


Ela é uma subclasse de VendaIngresso que implementa o cálculo do valor de um ingresso de estudante. Dessa forma, um programa Java que implemente a venda de ingressos para estudantes, baseada nas classes acima, irá conter os seguintes comandos:


VendaIngresso v = new VendaIngressoEstudante();

v.encerraVenda("Máquina Mortífera 20", "L8");


Qual padrão de projeto foi empregado na solução descrita acima?


A

Prototype


B

Adapter


C

Composite


D

Mediator


E

Template Method