/// <summary> /// Motivation /// Object Creation logic is too convoluted /// Constructor is not descriptive /// Name mandated by name of containing type /// Cannnot overload constructor /// Optional parameter hell /// Object creation is non-piecwise /// Outsourced to /// a seperate function (Factory Method) /// Exist in seperate class (Factory) /// Create hierarchy of factories with Abstract Factory /// </summary> static void Main(string[] args) { var machine = new HotDrinkMachine(); var drink = machine.MakeDrink(); drink.Consume(); }
// change to Main to run. public static void Main(string[] args) { var machine = new HotDrinkMachine(); var drink = machine.MakeDrink(); drink.Consume(); //var drink = machine.MakeDrink(HotDrinkMachine.AvailableDrink.Tea, 100); //drink.Consume(); }
static void RunAbstractFactory() { var machine = new HotDrinkMachine(); machine.MakeDrink(); //method that violates OCP // var drink = machine.MakeDrink(HotDrinkMachine.AvailableDrink.Tea, 20); // drink.Consume(); //method using reflection }
static void Main(string[] args) { var point = Point.Factory.NewPolarPoint(1.0, Math.PI / 2); Console.WriteLine(point); /*Foo x = await Foo.CreateAsync();*/ var machine = new HotDrinkMachine(); /*var drink = machine.MakeDrink(HotDrinkMachine.AvailableDrink.Tea, 100);*/ /*drink.Consume();*/ var drink = machine.MakeDrink(); drink.Consume(); }
static void Main(string[] args) { Console.WriteLine("Hello World from Factories Project!"); #region ConcreteFactoryClient //var point = Point.NewPolarPoint(1.0, Math.PI / 2); //var point = Point.Factory.NewPolarPoint(1.0, Math.PI / 2); //var point = Point.Factory.NewPolarPoint(1.0, Math.PI / 2); //Console.WriteLine(point); #endregion #region AbstractFactoryClient var machine = new HotDrinkMachine(); //var drink = machine.MakeDrink(HotDrinkMachine.AvailableDrink.Tea, 100); //drink.Consume(); var drink = machine.MakeDrink(); drink.Consume(); #endregion }
static async Task Main(string[] args) { var point = Point.Factory.NewCartisianPoint(5.5, 4.3); var ppoint = Point.Factory.NewPolarPoint(1.0, Math.PI / 2); Console.WriteLine($"Cartesian point: {point.ToString()}"); Console.WriteLine($"Polar point: {ppoint.ToString()}"); Console.WriteLine("Async factory usage:"); var asc = await AsynchronusFactory.CreateAsyncObject(); Console.WriteLine("Abstract Factory"); var machine = new HotDrinkMachine(); machine.MakeDrink(); }