public abstract class Pizza {
protected string pizzaName = "Uknown Pizza";
public virtual void bake() {
Console.WriteLine("Baking...");
public string getPizzaName() {
public class NYStylePepperoniPizza : Pizza {
public NYStylePepperoniPizza() {
pizzaName = "Pepperoni Pizza NY Styles";
public override void bake() {
Console.WriteLine("Baking for 30 mins extra margarin...");
public class ChiStylePepperoniPizza : Pizza {
public ChiStylePepperoniPizza() {
pizzaName = "Pepperoni Pizza CHI Styles";
public override void bake() {
Console.WriteLine("Baking for 10 mins with extra chicago pepper...");
public class NYStyleCheesePizza : Pizza {
public NYStyleCheesePizza() {
pizzaName = "Cheese Pizza NY Style";
public override void bake() {
Console.WriteLine("Baking for 20 mins Mozza all over NY Places...");
public class CHIStyleCheesePizza : Pizza {
public CHIStyleCheesePizza() {
pizzaName = "Cheese Pizza CHI Style";
public override void bake() {
Console.WriteLine("Baking for 20 mins with mallored cheese for Bulls...");
public abstract class PizzaStore {
public void orderPizza(string type) {
pizza = createPizza(type);
Console.WriteLine("Ordering " + pizza.getPizzaName());
public abstract Pizza createPizza(string type);
public class NYPizzaStore : PizzaStore {
public override Pizza createPizza(string type) {
return new NYStyleCheesePizza();
}else if(type == "pepperoni") {
return new NYStylePepperoniPizza();
public class CHIPizzaStore : PizzaStore {
public override Pizza createPizza(string type) {
return new CHIStyleCheesePizza();
}else if(type == "pepperoni") {
return new ChiStylePepperoniPizza();
public static void Main()
PizzaStore ChicagoPizzaStore = new CHIPizzaStore();
PizzaStore NewYorkPizzaStore = new NYPizzaStore();
ChicagoPizzaStore.orderPizza("cheese");
NewYorkPizzaStore.orderPizza("cheese");
ChicagoPizzaStore.orderPizza("pepperoni");
NewYorkPizzaStore.orderPizza("pepperoni");