I used this slide to conduct a training session on Factory Method pattern in my company (IMpulse). The examples were taken from the famous Head First Design Pattern book.
8. Factory Pattern(Contd.)
public class NYStylePizzaStore extends PizzaStore {
public Pizza createPizza(type) {
if (type.equals(“cheese”)) {
pizza = new NYStyleCheesePizza();
} else if (type.equals(“pepperoni”) {
pizza = new NYStylePepperoniPizza();
} else if (type.equals(“clam”) {
pizza = new NYStyleClamPizza();
} else if (type.equals(“veggie”) {
pizza = new NYStyleVeggiePizza();
}
}
}
9. Factory Pattern(Contd.)
public class ChicagoStylePizzaStore extends PizzaStore {
public Pizza createPizza(type) {
if (type.equals(“cheese”)) {
pizza = new ChicagoStyleCheesePizza();
} else if (type.equals(“pepperoni”) {
pizza = new ChicagoStylePepperoniPizza();
} else if (type.equals(“clam”) {
pizza = new ChicagoStyleClamPizza();
} else if (type.equals(“veggie”) {
pizza = new ChicagoStyleVeggiePizza();
}
}
}
10. Factory Pattern (Contd.)
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList<String> toppings = new
ArrayList<String>();
void prepare() {
System.out.println(name);
System.out.println(“dough...”);
System.out.println(“sauce...”);
System.out.println(“toppings:“);
for (int i = 0; i < toppings.size(); i++)
{
System.out.println(“ “ +
toppings.get(i));
}
}
void bake() {
System.out.println(“Bake”);
}
void cut() {
System.out.println(“Cutting slices”);
}
void box() {
System.out.println(“box”);
}
public String getName() {
return name;
}
}
11. Factory Pattern(Contd.)
public class NYStyleCheesePizza extends
Pizza {
public NYStyleCheesePizza() {
name = “NY Style SCheese Pizza”;
dough = “Thin Crust Dough”;
sauce = “Marinara Sauce”;
toppings.add(“Grated Reggiano
Cheese”);
}
}
public class ChicagoStyleCheesePizza
extends Pizza {
public ChicagoStyleCheesePizza() {
name = “Chicago Cheese Pizza”;
dough = “Extra Thick Crust Dough”;
sauce = “Plum Tomato Sauce”;
toppings.add(“Cheese”);
}
void cut() {
System.out.println(“Cutting slices”);
}
}
12. Factory Pattern(Contd.)
public class PizzaTestDrive {
public static void main(String[] args) {
PizzaStore nyStore = new NYPizzaStore();
PizzaStore chicagoStore = new ChicagoPizzaStore();
Pizza pizza = nyStore.orderPizza(“cheese”);
System.out.println(“Ethan ordered a “ + pizza.getName() + “n”);
pizza = chicagoStore.orderPizza(“cheese”);
System.out.println(“Joel ordered a “ + pizza.getName() + “n”);
}
}
13. Factory Pattern(Contd.)
● The Factory Method Pattern defines an interface for
creating an object, but lets subclasses decide which
class to instantiate. Factory Method lets a class
defer instantiation to subclasses.
● It also helps to relate to parallel class hierarchies
(the Product and the Creator).
14. Dependency Inversion Principle
● Depend upon abstractions. Do not depend upon
concrete classes.
● A successor of this principle is Inversion of Control,
also known as Hollywood Principle (IoC in short).
● A successor of IoC is Dependency Injection
Principle.
15. Dependency Inversion Guidelines
● No variable should hold a reference to a concrete
class.
● No class should derive from a concrete class.
● No method should override an implemented method
of any of its base classes.