Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Design Patterns - Códigos parecidos e o Template Method

Gostaria de saber como eu chamo o cálculo desses impostos IKCV e ICPP ?? No primeiro modulo padrão strategy criamos os impostos ISS e ICMS e na classe CalculadorDeImpostos temos o método RealizaCalculo, que recebe Orçamento e imposto, e a partir do imposto chama o método Calcula.

Mas nesse caso o Calcula esta na Template, que é abstrata.

4 respostas
solução!

Vitor, Bom dia !

exatamente a classe template é abstrata, e ela herda de outra classe abstrata chamada imposto , onde o método calcula está apenas descrito na classe , correto .

neste caso você pode sobrescrever a classe Calcula na IKCV e ICCP (isso por causa de cada imposto da classes ) , por mais que ela herde de Template , ela automaticamente irá também herda de imposto , pois a classe template é filha da classe imposto .

caso você não sobre escreva o método calcula irá realizar o calculo do pai . que neste caso é Template .

Espero ter Ajudado , caso tenha sanado as dúvidas feche o tópico por gentileza .

Bons Estudos

Obrigado Celso pela resposta. Até ai eu entendi, mas se eu chamar a IKCV vai calcular o método da IKCV e assim por diante.

Acho que não entendi direito, por exemplo:

TemplateDeImpostoCondicional icpp = new ICPP(); TemplateDeImpostoCondicional ikcv = new IKCV();

Orcamento orcamento = new Orcamento(500.0); orcamento.AdicionaItem(new Item("CANETA", 250.0));

//double valor = icpp.Calcula(orcamento); double valor = ikcv.Calcula(orcamento); Console.WriteLine(valor);

Console.ReadKey();

Se eu chamar o calcula por icpp tem uma regra, e se for pelo ikcv tem outra.

Não teria como chamar o calcula da template e ele aplicar os 2 impostos???

Vitor ,

não teria como chamar a calcula do template , pois como você disse os 2 impostos tem regras diferentes .

para isso acontecer teria que chamar essa regra de cada imposto na calcula do template , assim teriamos que colocar essa regra em cada classe (icpp e ikcv e outros que pode surgir )teriamos um alto acoplamento nas classes e dificil manutenção pois teriamos que mudar em cada classe futuramente onde não é uma boa pratica em O.O.

A classe Template , existe para facilitar ja que os dois imposto tem os calculos iguais , mas cada um possui uma peculiaridade , então abstraiu esse calculo para classe template , assim forçando passar somente a regra de cada imposto ( minimaTaxacao , maximaTaxacao , deveUsarMaximaTaxacao)

assim podendo reutilizar essa classe para outro imposto que possui caracteristica parecidas mas com valores diferentes .

Legal Celso, Agora ficou claro. Obrigado!