static void Main() { /* Resolver com DI no mundo real */ IVendaFacade vendaFacade = new VendaFacade(new VendaRepositorio(), new VendaItemRepositorio()); Venda venda = new Venda("Cliente teste"); venda.AdicionarItem(new VendaItem(1, 2, 10M)); venda.AdicionarItem(new VendaItem(5, 10, 20M)); /* Usando o facade de fato, centralizar todo o processo de venda em somente um unico lugar * Nao nos preocupamos com o que existe no método InserirVenda, se ele usa 1 ou N repositorio, como somente um ponto para efetuar venda * facilita a manutencao futuramente */ var efetuouVenda = vendaFacade.InserirVenda(venda); if (efetuouVenda != null) { Console.WriteLine("Venda cadastrada com sucesso"); } else { Console.WriteLine("Falha ao cadastra venda"); } Console.ReadKey(); }
static void Main(string[] args) { #region singleton var conexao1 = Conexao.GetInstance(); var conexao2 = Conexao.GetInstance(); Console.WriteLine(conexao1.Equals(conexao2) ? "Conexões iguais" : "Conexões diferentes"); #endregion #region polimorfismo com interface var matrix = new Matrix(); var crepusculo = new Crepusculo(); var cinema = new Cinema(); cinema.EntrarNoCinema(matrix); cinema.EntrarNoCinema(crepusculo); #endregion #region Factory method #region exemplo com enum //exemplo do factory com mau uso de enum, //pois a cada moto nova será incrementado o enum, ferindo o princípio de aberto/fechado var fabricaMoto = new FabricaMoto(); var cg = fabricaMoto.FabricarMoto(EMotos.CG150); var f800 = fabricaMoto.FabricarMoto(EMotos.F800); Console.WriteLine(cg.ExibirModelo()); Console.WriteLine(f800.ExibirModelo()); #endregion #region exemplo sem uso de enum Fabrica[] fabricas = new Fabrica[4]; fabricas[0] = new FabricaCG150(); fabricas[1] = new FabricaF800(); fabricas[2] = new FabricaNinja250R(); fabricas[3] = new FabricaYBR(); foreach (var fabricador in fabricas) { var moto = fabricador.FabricarMoto(); Console.WriteLine("Criado {0}", moto.ExibirModelo()); } #endregion #endregion #region Facade var game = new SistemasFacade(); game.InicializarSubSistemas(); game.ReproduzirAudio("AC/DC-Back_in_Black.mp3"); var venda = new VendaFacade(); venda.FecharPedido(); #endregion #region Proxy IImagem imagem = new ImagemProxy("c:/teste.png"); imagem.MostrarImagem(); var Car = new ProxyCar(new Driver(26)); Car.DriveCar(); var motorista = new MotoristaProxy(18); motorista.Dirigir(); #endregion #region State try { IOrdemServicoState os = new Elaboracao(); var agendamento = os.Agendar(); var execucao = agendamento.Executar(); var finalizacao = execucao.Finalizar(); finalizacao.Finalizar(); } catch (Exception ex) { Console.WriteLine(ex.Message); } #endregion #region strategy var localizacaoEnsaioPM = new EnsaioPlanoManutencaoContext(new LocalizacaoEnsaioPlanoManutencao()).GetEnsaios(); var equipmentoEnsaioPM = new EnsaioPlanoManutencaoContext(new EquipamentoEnsaioPlanoManutencao()).GetEnsaios(); var familiaEnsaioPM = new EnsaioPlanoManutencaoContext(new FamiliaEnsaioPlanoManutencao()).GetEnsaios(); new GeradorBoletoContext(new GeradorBoletoBB()).Gerar(); new GeradorBoletoContext(new GeradorBoletoBradesco()).Gerar(); new GeradorBoletoContext(new GeradorBoletoItau()).Gerar(); new GeradorBoletoContext(new GeradorBoletoCaixa()).Gerar(); #endregion }