- 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