Tuesday, 9 October 2018

Factory method pattern



  • The factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created.
  • Design problems to design flexible and reusable object-oriented software, that is, objects that are easier to implement, change, test, and reuse.
  • The Factory Method design pattern solves problems like
    • How can an object be created so that subclasses can redefine which class to instantiate?
  • Creating an object directly within the class that requires (uses) the object is inflexible because it commits the class to a particular object and makes it impossible to change the instantiation independently from (without having to change) the class.
  • Factory Method design pattern will,
    • Define a separate operation (factory method) for creating an object.
    • Create an object by calling a factory method.
  • In this way subcalss can redefine which class to initiate

  • Step 1
    • Create an interface.
    • public interface Shape { void draw(); }
  • Step 2
    • Create concrete classes implementing the same interface.
    • Rectangle.java
    • public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } }
    • Square.java
    • public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } }
    • public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } }
        
  • Step 3
    • Create a Factory to generate object of concrete class based on given information
    • ShapeFactory.java
    • public class ShapeFactory { //use getShape method to get object of type shape public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; } }
  • Step 4
    • Use the Factory to get object of concrete class by passing an information such as type.
    • FactoryPatternDemo.java
    • public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //get an object of Circle and call its draw method. Shape shape1 = shapeFactory.getShape("CIRCLE"); //call draw method of Circle shape1.draw(); //get an object of Rectangle and call its draw method. Shape shape2 = shapeFactory.getShape("RECTANGLE"); //call draw method of Rectangle shape2.draw(); //get an object of Square and call its draw method. Shape shape3 = shapeFactory.getShape("SQUARE"); //call draw method of square shape3.draw(); } }

    No comments:

    Post a Comment

    Search This Blog

    Contact us

    Name

    Email *

    Message *