Factory

Definition


Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

UML class diagram


Participants


  • Product
    • defines the interface of objects the factory method creates
  • ConcreteProduct
    • implements the Product interface
  • Creator
    • declares the factory method, which returns an object of type Product. Creator may also define a default implementation of the factory method that returns a default ConcreteProduct object.
    • may call the factory method to create a Product object.
  • ConcreteCreator
    • overrides the factory method to return an instance of a ConcreteProduct.

Sample code in Java

package com.hong.factory;

interface Product
{

}
class ConcreteProductA implements Product
{

}
class ConcreteProductB implements Product
{
    
}
interface Creator
{
    public Product factoryMethod(String productName);
}

class ConcreteCreator implements Creator
{
    @Override
    public Product factoryMethod(String productName) {
        if("productA".equals(productName))
            return new ConcreteProductA(); 
        if("productB".equals(productName))
            return new ConcreteProductB();
        return null;
    }
}

public class Factory_structure {
    
    public static void main(String[] args)
    {
        Creator  factory = new ConcreteCreator(); 
        
        Product productA = factory.factoryMethod("productA");
        System.out.println("Create a product: " + productA.getClass().getName());
        
        Product productB = factory.factoryMethod("productB"); 
        System.out.println("Create a product: " + productB.getClass().getName());
        
    }
}