/*Intenção: definir uma interface para criar um objeto, mas é a suas subclasses que decidem qual classe vão instanciar. * permite uma classe adiar a instaciação para subclasses. * * Descrição:O padrão pode ser aplicado quando uma classe não é capaz de saber antecipadamente quais objetos devem realmente ser criados, quando uma classe repassa(delega) * para suas subclasses a responsabilidades de quais objetos realmentem devem ser criados * * Participantes: * Product - define a interface de objetos que o método de fabrica cria. * Concrete Product - inplementa a interface Product * Creator - Declara o método de fabrica, o qual retorna um objeto do tipo Product. Creator tambem pode definir uma implementação por omissão do método factory que retorna por * omissão um objeto Concrete Product. * Concrete Creator - redefine o método fabrica para retornar uma instância de um Concrete Product. */ public void FactoryMethod() { Creator[] creators = new Creator[2]; creators[0] = new FacebookCreator(); creators[1] = new GoogleCreator(); foreach (Creator c in creators) { Autenticacao aut = c.CreateInstance(); Response.Write("<br>" + aut.Autenticar()); } }
public void DoAuthentication(AuthenticatorType authenticatorType) { Creator creator = null; switch (authenticatorType) { case AuthenticatorType.Google: creator = new GoogleCreator(); break; case AuthenticatorType.Facebook: creator = new FacebookCreator(); break; } Authenticator authenticator = creator.CreateInstance(); authenticator.DoAuthentication(); }
/// <summary> /// Client /// </summary> /// <param name="args"></param> static void Main(string[] args) { #region Abstract Factory Console.WriteLine("Abstract Factory initialize"); //Step 1 SqlCommand cmd = new SqlCommand(); SqlConection cnn = new SqlConection(); cmd.Execute(); //Apply Abstract Factory pattern DbFactory db = new OracleFactory(); var con = db.createConnection(); con.Open(); var command = db.createCommand(); command.Execute(); Console.WriteLine("Abstract Factory finalize" + Environment.NewLine); #endregion #region Builder Console.WriteLine("Builder initialize"); //Step 1 var car = new Auto("Car"); car["gear"] = "127c"; car["doors"] = "4"; car["tires"] = "4"; car.Show(); Console.ReadLine(); var bike = new Auto("bike"); bike["gear"] = "50c"; bike["doors"] = "0"; bike["tires"] = "2"; bike.Show(); Console.ReadLine(); //Apply Builder pattern AutoBuilder builder; var director = new Director(); builder = new CarBuilder(); director.Construct(builder); builder.Auto.Show(); builder = new BikeBuilder(); director.Construct(builder); builder.Auto.Show(); Console.WriteLine("Builder finalize" + Environment.NewLine); #endregion #region Factory Console.WriteLine("Factory Method Initialize"); //Step 1 var login = new AuthGoogle(); login.Authorize(); Console.ReadLine(); //Apply Factory Creator[] creators = new Creator[2]; creators[0] = new FacebookCreator(); creators[1] = new GoogleCreator(); foreach (Creator c in creators) { Auth aut = c.CreateInstance(); //Factory Method aut.Authorize(); } Console.ReadLine(); Console.WriteLine("Factory Finalize" + Environment.NewLine); #endregion #region Prototype Console.WriteLine("Prototype initialize"); Book p1 = new Book(1, "Design Patterns - Book", 20.00); Book c1 = (Book)p1.Clone(); Console.WriteLine(c1.Description); DVD p2 = new DVD(2, "Design Patterns - DVD", 25.00); DVD c2 = (DVD)p2.Clone(); Console.WriteLine(c2.Description); Console.WriteLine("Prototype Finalize" + Environment.NewLine); Console.ReadKey(); #endregion #region Singleton Console.WriteLine("Singleton Initialize"); var con1 = ConnectionBD.Instance(); con1.stringConexao = "SQLServer"; con1.Open(); var con2 = ConnectionBD.Instance(); con2.stringConexao = "Oracle"; con2.Open(); if (con1.Equals(con2)) { Console.WriteLine("Equals Instances"); } Console.WriteLine("Singleton Finalize" + Environment.NewLine); Console.ReadKey(); #endregion }