static void Main(string[] args)
        {
            #region Exemplo Pattern Builder
            List <IAcaoAposGererNota> listaAcoes = new List <IAcaoAposGererNota>();
            listaAcoes.Add(new EnviadorDeEmail());
            listaAcoes.Add(new NotaFiscalDao());
            listaAcoes.Add(new EnviadorDeSms());

            NotaFiscalBuilder criador = new NotaFiscalBuilder(listaAcoes);
            //Mudado os métodos para formar um "Fluent Interface"/"Method Chaining".
            criador
            .ParaEmpresa("Caelum Ensino e Inovacao")
            .ComCnpj("23.456.789/0001-12")
            .ComItem(new ItemDaNota("Item 1", 100))
            .ComItem(new ItemDaNota("Item 2", 200))
            .NaDataAtual()
            .ComObservacoes("Obs!");

            //criador.AdicionarAcao(new EnviadorDeEmail());
            //criador.AdicionarAcao(new NotaFiscalDao());
            //criador.AdicionarAcao(new EnviadorDeSms());
            criador.AdicionarAcao(new Impressora());
            criador.AdicionarAcao(new Multiplicador(2.5));

            NotaFiscal notaFiscal = criador.Constroi();

            Console.WriteLine(notaFiscal.ValorBruto);
            Console.WriteLine(notaFiscal.Impostos);
            Console.ReadKey();
            Console.Clear();
            #endregion

            #region Exemplo Tutorials Point
            Subject subject = new Subject();

            new HexaObserver(subject);
            new OctalObserver(subject);
            new BinaryObserver(subject);

            Console.WriteLine("First state change: 15");
            subject.setState(15);
            Console.WriteLine();
            Console.WriteLine("Second state change: 10");
            subject.setState(10);
            #endregion

            Console.ReadKey();
        }
Exemple #2
0
        /// <summary>
        /// Padrao Observer - Utiliza-se em cenarios onde precisa-se executar N ações após determinado evento
        /// de maneira desacoplada do codigo principal. Nesse caso, após a geração da nota fiscal, deve-se gerar
        /// varios eventos pertinentes ao negocio, neste caso, o observer se aplica.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            NotaFiscalBuilder builder = new NotaFiscalBuilder();

            builder.AdicionarAcao(new Acoes.EnvioEmail());
            builder.AdicionarAcao(new Acoes.Impressoes());
            builder.AdicionarAcao(new Acoes.Persistencia());


            NotaFiscal.NotaFiscal nf = builder.builderRazaoSocial("Microsoft")
                                       .builderCNPJ("000.000.000./0001-03")
                                       .builderItemNota(new ItemNotaFiscal(350))
                                       .builderItemNota(new ItemNotaFiscal(450))
                                       .builderItemNota(new ItemNotaFiscal(120))
                                       .builderItemNota(new ItemNotaFiscal(890))
                                       .Constroi().Print();

            Console.Read();
        }