예제 #1
0
        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
        }