Factory Method Pattern
Upcoming SlideShare
Loading in...5
×
 

Factory Method Pattern

on

  • 458 views

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.

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.

Statistics

Views

Total Views
458
Views on SlideShare
458
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Factory Method Pattern Factory Method Pattern Presentation Transcript

  • Factory Pattern
  • Factory Pattern Duck duck; if (picnic) { duck = new MallardDuck(); } else if (hunting) { duck = new DecoyDuck(); } else if (inBathTub) { duck = new RubberDuck(); }
  • Factory Pattern(Contd.) Pizza orderPizza(String type) { Pizza pizza; if (type.equals(“cheese”)) { pizza = new CheesePizza(); } else if (type.equals(“greek”) { pizza = new GreekPizza(); } else if (type.equals(“pepperoni”) { pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }
  • Factory Pattern (Contd.) public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals(“cheese”)) { pizza = new CheesePizza(); } else if (type.equals(“pepperoni”)) { pizza = new PepperoniPizza(); } else if (type.equals(“clam”)) { pizza = new ClamPizza(); } else if (type.equals(“veggie”)) { pizza = new VeggiePizza(); } return pizza; } }
  • Factory Pattern (Contd.) public class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } // other methods here }
  • Factory Pattern(Contd.) NYPizzaFactory nyFactory = new NYPizzaFactory(); PizzaStore nyStore = new PizzaStore(nyFactory); nyStore.order(“Veggie”); ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory(); PizzaStore chicagoStore = new PizzaStore(chicagoFactory); chicagoStore.order(“Veggie”);
  • Factory Pattern(Contd.) public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String type); }
  • 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(); } } }
  • 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(); } } }
  • 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; } }
  • 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”); } }
  • 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”); } }
  • 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).
  • 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.
  • 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.
  • Resources ● Head First Design Pattern
  • Thank You