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(); }
/// <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(); }