Olá. Quando implementei o exercício Relatórios e Template Method, implementei de uma forma completamente diferente apresentado pelo instrutor, mas utilizando o Padrão Template Method. O que acham?
namespace Relatorio
{
public class Conta
{
public Conta()
{
this.Itens = new List<Conta>();
}
public Conta(string agencia, string numeroConta, string titular, double saldo)
{
Agencia = agencia;
NumeroConta = numeroConta;
Titular = titular;
Saldo = saldo;
this.Itens = new List<Conta>();
}
public string Agencia { get; set; }
public string NumeroConta { get; set; }
public string Titular { get; set; }
public double Saldo { get; set; }
public IList<Conta> Itens { get; private set; }
public void AdicionarConta(Conta item)
{
this.Itens.Add(item);
}
}
}
namespace Relatorio
{
public enum TipoRelatorio
{
Simples = 0,
Complexo
}
interface Impressao
{
void Imprimir(Conta conta, TipoRelatorio tipoRelatorio);
}
}
namespace Relatorio
{
public class Relatorio : TemplateDeRelatorio
{
protected override void ImprimirRelatorioSimples(Conta conta)
{
Console.WriteLine("Banco do Povo | Relatório Simples");
Console.WriteLine("===============");
Console.WriteLine("Titular\t\tSaldo");
Console.WriteLine("--------------------------");
foreach (Conta item in conta.Itens)
{
Console.WriteLine($"{ item.Titular}\t{item.Saldo}");
}
Console.WriteLine("");
Console.WriteLine($"Quantiade: {conta.Itens.Count}");
Console.WriteLine("===============");
Console.WriteLine("Telefone: (99) 99999-9999");
}
protected override void ImprimieRelatorioComplexo(Conta conta)
{
Console.WriteLine("Banco do Povo - Relatório Complexo");
Console.WriteLine("Rua Sem Saída, s/n, Centro, Cidade do Estado");
Console.WriteLine("Telefone: (99) 99999-9999");
Console.WriteLine("===============");
Console.WriteLine("Agência\tConta\tTitular\t\tSaldo");
Console.WriteLine("---------------------------");
foreach (Conta item in conta.Itens)
{
Console.WriteLine($"{item.Agencia}\t{item.NumeroConta}\t{ item.Titular}\t{item.Saldo}");
}
Console.WriteLine("");
Console.WriteLine($"Quantiade: {conta.Itens.Count}");
Console.WriteLine("===============");
Console.WriteLine("E-mail: sacdobanco@bancodopovo.com.br");
Console.WriteLine(DateTime.Now);
}
protected override bool ImprimirQualRelatorio(Conta conta, TipoRelatorio tipoRelatorio)
{
return tipoRelatorio == TipoRelatorio.Simples;
}
}
}
namespace Relatorio
{
public abstract class TemplateDeRelatorio : Impressao
{
public void Imprimir(Conta conta, TipoRelatorio tipoRelatorio)
{
if (ImprimirQualRelatorio(conta, tipoRelatorio))
{
ImprimirRelatorioSimples(conta);
}
else
{
ImprimieRelatorioComplexo(conta);
}
}
protected abstract void ImprimirRelatorioSimples(Conta conta);
protected abstract void ImprimieRelatorioComplexo(Conta conta);
protected abstract bool ImprimirQualRelatorio(Conta conta, TipoRelatorio tipoRelatorio);
}
}
namespace Relatorio
{
class Program
{
static void Main(string[] args)
{
Relatorio relatorio = new Relatorio();
Conta conta = new Conta();
conta.AdicionarConta(new Conta("1234", "45622-2", "Iara Frois",799.92));
conta.AdicionarConta(new Conta("1234", "13466-6", "Óscar Frias",100.01));
conta.AdicionarConta(new Conta("1242", "12782-7", "Josefina Mexia",223.11));
conta.AdicionarConta(new Conta("1234", "13467-7", "Joel Fogaça",419.54));
conta.AdicionarConta(new Conta("1255", "13465-9", "Inês Rebouças", 532.99));
conta.AdicionarConta(new Conta("1255", "34212-5", "Timur Ribas",432.22));
conta.AdicionarConta(new Conta("1242", "35632-3", "Oziel Bessa", 312.22));
conta.AdicionarConta(new Conta("1256", "75643-2", "Iara Assunção",122.14));
relatorio.Imprimir(conta, TipoRelatorio.Simples);
Console.WriteLine("");
relatorio.Imprimir(conta, TipoRelatorio.Complexo);
Console.ReadKey();
}
}
}