// Este código eu criei pensando no padrão Builder. Uma tela que tenha 3 opções de escolha (Dinheiro,Cartao ou Cheque) e de acordo com esse escolha no botão de imprimir vai gerar o movimento(CHEQUE ou CARTÃO ou DINHEIRO) para impressão com seus respectivos parâmetros. Sendo que nem todos os parâmetros serão usados. Está legal para isso ??
public class Movimento
{
public string TipoMovimento; // CH = cheque, CA = Cartao ou DN = Dinheiro
public int CodigoBanco;
public string Bandeira;
public string Status;
public string DtInicial;
public string DtFinal;
public string TipoOperacao; // R=Recebimento,P=Pagamento ou A=ambos
public double valor;
}
public abstract class MovimentoBuilder
{
public Movimento Movimento;
public abstract void TipoMovimento(object tipoRecPag);
public abstract void CodigoDoBanco(object idBanco);
public abstract void SituacaoStatus(object situacaoStatus);
public abstract void DataInicial(object dataInicial);
public abstract void DataFinal(object dataFinal);
public abstract void Operacao(object operacao);
public abstract void BandeiraCartao(object bandeira);
public abstract void Valor(object valor);
public void CriarMovimento()
{
Movimento = new Movimento();
}
public Movimento RecuperaMovimento()
{
return Movimento;
}
}
public class Diretor
{
public Movimento CriaMovimento(MovimentoBuilder movimentoBuilder,params object[] param)
{
movimentoBuilder.CriarMovimento();
movimentoBuilder.CodigoDoBanco(param[0]);
movimentoBuilder.SituacaoStatus(param[1]);
movimentoBuilder.Operacao(param[2]);
movimentoBuilder.DataInicial(param[3]);
movimentoBuilder.DataFinal(param[4]);
movimentoBuilder.TipoMovimento(param[5]);
movimentoBuilder.Valor(param[6]);
movimentoBuilder.BandeiraCartao(param[7]);
return movimentoBuilder.RecuperaMovimento();
}
}
public class ChequeBuilder : MovimentoBuilder
{
public override void CodigoDoBanco(object idBanco)
{
Movimento.CodigoBanco = Convert.ToInt32(idBanco);
}
public override void SituacaoStatus(object situacaoStatus)
{
Movimento.Status = Convert.ToString(situacaoStatus);
}
public override void DataInicial(object dataInicial)
{
Movimento.DtInicial = Convert.ToDateTime(dataInicial).ToShortDateString();
}
public override void DataFinal(object dataFinal)
{
Movimento.DtFinal = Convert.ToDateTime(dataFinal).ToShortDateString();
}
public override void Operacao(object operacao)
{
Movimento.TipoOperacao = Convert.ToString(operacao);
}
public override void TipoMovimento(object tipoRecPag)
{
Movimento.TipoMovimento = Convert.ToString(tipoRecPag);
}
public override void BandeiraCartao(object bandeira)
{
Movimento.Bandeira = Convert.ToString(bandeira);
}
public override void Valor(object valor)
{
Movimento.valor = Convert.ToDouble(valor);
}
}
public class CartaoBuilder : MovimentoBuilder
{
public override void CodigoDoBanco(object idBanco)
{
Movimento.CodigoBanco = Convert.ToInt32(idBanco);
}
public override void DataInicial(object dataInicial)
{
Movimento.DtInicial = Convert.ToDateTime(dataInicial).ToShortDateString();
}
public override void DataFinal(object dataFinal)
{
Movimento.DtFinal = Convert.ToDateTime(dataFinal).ToShortDateString();
}
public override void Operacao(object operacao)
{
Movimento.TipoOperacao = Convert.ToString(operacao);
}
public override void SituacaoStatus(object situacaoStatus)
{
Movimento.Status = Convert.ToString(situacaoStatus);
}
public override void TipoMovimento(object tipoRecPag)
{
Movimento.TipoMovimento = Convert.ToString(tipoRecPag);
}
public override void BandeiraCartao(object bandeira)
{
Movimento.Bandeira = Convert.ToString(bandeira);
}
public override void Valor(object valor)
{
Movimento.valor = Convert.ToDouble(valor);
}
}
class Program
{
static void Main(string[] args)
{
object[] Params;
int codBanco = 10;
string status = "DEP"; // Depositado
string operacao = "P"; // P=Pagamento
DateTime dtInicial = DateTime.Now;
DateTime dtFinal = DateTime.Now.AddMonths(2);
string tipoMov = "CH";
double valor = 100.55;
string bandeira = string.Empty;
Params = new object[] {codBanco,status,operacao,dtInicial,dtFinal,tipoMov,valor,bandeira };
MovimentoBuilder cheque = new ChequeBuilder();
Diretor dir = new Diretor();
Movimento chequeMov = dir.CriaMovimento(cheque,Params);
}
}