/// <summary>
        /// BUILDER: Facilita criação de classes com construtores grandes e complexos
        /// </summary>
        private static void Builder()
        {
            NotaFiscalBuilder builder = new NotaFiscalBuilder();

            builder
            .ParaEmpresa("Caelum Ensino e Inovação")
            .ComCnpj("23.456.789/0001-12")
            .ComItem(new ItemDaNota("Carro", 100))
            .ComItem(new ItemDaNota("Bike", 200))
            .NaDataAtual()
            .ComObservacao("Teste de Nota Fiscal");

            NotaFiscal nf = builder.Constroi();

            Console.WriteLine(nf);
            Console.ReadKey();
        }
        /// <summary>
        /// OBSERVER: permite que diversas ações sejam executadas de forma transparente à classe principal
        /// </summary>
        private static void Observer()
        {
            NotaFiscalBuilder builder = new NotaFiscalBuilder();

            builder
            .ParaEmpresa("Caelum Ensino e Inovação")
            .ComCnpj("23.456.789/0001-12")
            .ComItem(new ItemDaNota("Carro", 100))
            .ComItem(new ItemDaNota("Bike", 200))
            .NaDataAtual()
            .ComObservacao("Teste de Nota Fiscal");

            builder.AdicionaAcao(new EnviadorDeEmail());
            builder.AdicionaAcao(new NotaFiscalDao());
            builder.AdicionaAcao(new EnviadorDeSms());
            builder.AdicionaAcao(new Impressora());

            NotaFiscal nf = builder.Constroi();

            Console.ReadKey();
        }