Factory pattern is creational design pattern that suppose to create an object for client at runtime.In other words, responsibility of creating objects with same type delegate to some other class which is known as factory class.
public interface Pizza
{
void prepare();
void bake();
void cut();
void box();
}
public class CheesePizza : Pizza
{
public void prepare()
{
Console.Write("\n CheesePizza: prepare \n");
}
public void bake()
{
Console.Write("CheesePizza: bake \n");
}
public void cut()
{
Console.Write("CheesePizza: cut \n");
}
public void box()
{
Console.Write("CheesePizza: box \n");
}
}
public class VeggiePizza : Pizza
{
public void prepare()
{
Console.Write("\n VeggiePizza: prepare \n");
}
public void bake()
{
Console.Write("VeggiePizza: bake\n");
}
public void cut()
{
Console.Write("VeggiePizza: cut\n");
}
public void box()
{
Console.Write("VeggiePizza: box\n");
}
}
//SimplePizzaFactory class suppose to create object for client
public class SimplePizzaFactory
{
public Pizza CreatePizza(string type)
{
Pizza pizza = null;
switch (type)
{
case "cheese":
pizza = new CheesePizza();
break;
case "veggie":
pizza = new VeggiePizza();
break;
default:
break;
}
return pizza;
}
}
public class PizzaStore
{
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory)
{
this.factory = factory;
}
public Pizza OrderPizza(string type)
{
Pizza pizza;
//uses the factory to create pizza
pizza = factory.CreatePizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
//************HeadDesign: simple factory pattern*********************
PizzaStore pizzStore = new PizzaStore(new SimplePizzaFactory());
pizzStore.OrderPizza("cheese");
pizzStore.OrderPizza("veggie");
Console.ReadKey();
//*******************************************************************
Abstract factory pattern: extended to existing simple factory and creating the related class for object creation.
public interface Pizza
{
void prepare();
void bake();
void cut();
void box();
}
public class NYSyleCheesePizza : Pizza
{
public void prepare()
{
Console.Write("\n NYSyleCheesePizza: prepare \n");
}
public void bake()
{
Console.Write("NYSyleCheesePizza: bake \n");
}
public void cut()
{
Console.Write("NYSyleCheesePizza: cut \n");
}
public void box()
{
Console.Write("NYSyleCheesePizza: box \n");
}
}
public class NYVeggiePizza : Pizza
{
public void prepare()
{
Console.Write("\n NYVeggiePizza: prepare \n");
}
public void bake()
{
Console.Write("NYVeggiePizza: bake \n");
}
public void cut()
{
Console.Write("NYVeggiePizza: cut \n");
}
public void box()
{
Console.Write("NYVeggiePizza: box \n");
}
}
public class ChSyleCheesePizza : Pizza
{
public void prepare()
{
Console.Write("\n ChSyleCheesePizza: prepare \n");
}
public void bake()
{
Console.Write("ChSyleCheesePizza: bake \n");
}
public void cut()
{
Console.Write("ChSyleCheesePizza: cut \n");
}
public void box()
{
Console.Write("ChSyleCheesePizza: box \n");
}
}
public class ChVeggiePizza : Pizza
{
public void prepare()
{
Console.Write("\n ChVeggiePizza: prepare \n");
}
public void bake()
{
Console.Write("ChVeggiePizza: bake \n");
}
public void cut()
{
Console.Write("ChVeggiePizza: cut \n");
}
public void box()
{
Console.Write("ChVeggiePizza: box \n");
}
}
public abstract class PizzaStore
{
public Pizza OrderPizza(string type)
{
Pizza pizza;
//uses the factory to create pizza
pizza = CreatePizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
public abstract Pizza CreatePizza(string type);
}
public class NYPizzaStore : PizzaStore
{
public override Pizza CreatePizza(string type)
{
switch (type)
{
case "cheese":
return new NYSyleCheesePizza();
break;
case "veggie":
return new NYVeggiePizza();
break;
default:
break;
}
return null;
}
}
public class ChPizzaStore : PizzaStore
{
public override Pizza CreatePizza(string type)
{
switch (type)
{
case "cheese":
return new ChSyleCheesePizza();
break;
case "veggie":
return new ChVeggiePizza();
break;
default:
break;
}
return null;
}
}
//************HeadDesign: abstract factory pattern*******************
PizzaStore NYPizzaStore= new NYPizzaStore();
NYPizzaStore.OrderPizza("cheese");
PizzaStore ChPizzaStore = new ChPizzaStore();
ChPizzaStore.OrderPizza("veggie");
Console.ReadKey();
//********************************************************************
No comments:
Post a Comment