Factory Method Design Pattern
A factory method pattern is a creational pattern. It is used to
instantiate an object from one among a set of classes based on a logic.
Assume that you have a set of classes which extends a common super class or interface. Now you will create a concrete class with a method which accepts one or more arguments. This method is our factory method. What it does is, based on the arguments passed factory method does logical operations and decides on which sub class to instantiate. This factory method will have the super class as its return type. So that, you can program for the interface and not for the implementation. This is all about factory method design pattern.
Base class:
First subclass:
Second subclass:
Factory class:
Using the factory method to instantiate
Assume that you have a set of classes which extends a common super class or interface. Now you will create a concrete class with a method which accepts one or more arguments. This method is our factory method. What it does is, based on the arguments passed factory method does logical operations and decides on which sub class to instantiate. This factory method will have the super class as its return type. So that, you can program for the interface and not for the implementation. This is all about factory method design pattern.
Sample factory method design pattern implementation in Java API
For a reference of how the factory method design pattern is implemented in Java, you can have a look at SAXParserFactory. It is a factory class which can be used to intantiate SAX based parsers to pares XML. The method newInstance is the factory method which instantiates the sax parsers based on some predefined logic.Block diagram for The Design Pattern
Sample Java Source Code for Factory Method Design Pattern
Based on comments received from users, I try to keep my sample java source code as simple as possible for a novice to understand.Base class:
package com.java.sample.designpattern.factorymethod; //super class that serves as type to be instantiated for factory method pattern public interface Pet { public String speak(); } |
package com.java.sample.designpattern.factorymethod; //sub class 1 that might get instantiated by a factory method pattern public class Dog implements Pet { public String speak() { return "Bark bark..." ; } } |
package com.java.sample.designpattern.factorymethod; //sub class 2 that might get instantiated by a factory method pattern public class Duck implements Pet { public String speak() { return "Quack quack..." ; } } |
package com.java.sample.designpattern.factorymethod; //Factory method pattern implementation that instantiates objects based on logic public class PetFactory { public Pet getPet(String petType) { Pet pet = null ; // based on logic factory instantiates an object if ( "bark" .equals(petType)) pet = new Dog(); else if ( "quack" .equals(petType)) pet = new Duck(); return pet; } } |
package com.java.sample.designpattern.factorymethod; //using the factory method pattern public class SampleFactoryMethod { public static void main(String args[]){ //creating the factory PetFactory petFactory = new PetFactory(); //factory instantiates an object Pet pet = petFactory.getPet( "bark" ); //you don't know which object factory created System.out.println(pet.speak()); } } |
Output of the above sample program for Factory Method Pattern
Bark bark
Comments
Post a Comment