Factory Method Design Pattern Example in Java

Problem Statement

You are developing a software system for an e-commerce platform that deals with various types of products. Each product category (e.g., electronics, clothing, books) requires specific handling during creation. However, you want to decouple the client code from the concrete product creation logic to enhance flexibility and maintainability. Additionally, you want to allow for easy extension by adding new product types in the future without modifying existing code.

Solution using Abstract Class

The above problem can be solved using Factory Method Design Pattern:

Java




// Abstract Product Class
abstract class Product {
    public abstract void display();
}
 
// Concrete Products
class ConcreteProductA extends Product {
    @Override
    public void display() {
        System.out.println("This is Concrete Product A.");
    }
}
 
class ConcreteProductB extends Product {
    @Override
    public void display() {
        System.out.println("This is Concrete Product B.");
    }
}
 
// Creator Abstract Class
abstract class Creator {
    public abstract Product factoryMethod();
}
 
// Concrete Creators
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}
 
class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}
 
// Client Code
public class FactoryMethodExample {
    public static void main(String[] args) {
        Creator creatorA = new ConcreteCreatorA();
        Product productA = creatorA.factoryMethod();
        productA.display();
 
        Creator creatorB = new ConcreteCreatorB();
        Product productB = creatorB.factoryMethod();
        productB.display();
    }
}


Output

This is Concrete Product A.
This is Concrete Product B.

Solution using Interface

The above problem can be solved using Factory Method Design Pattern:

Java




// Product Interface
interface Product {
    void display();
}
 
// Concrete Products
class ConcreteProductA implements Product {
    @Override
    public void display() {
        System.out.println("This is Concrete Product A.");
    }
}
 
class ConcreteProductB implements Product {
    @Override
    public void display() {
        System.out.println("This is Concrete Product B.");
    }
}
 
// Factory Interface
interface Factory {
    Product factoryMethod();
}
 
// Concrete Factories
class ConcreteFactoryA implements Factory {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}
 
class ConcreteFactoryB implements Factory {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}
 
// Client Code
public class FactoryMethodExample {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.factoryMethod();
        productA.display();
 
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.factoryMethod();
        productB.display();
    }
}


Output

This is Concrete Product A.
This is Concrete Product B.

Factory method design pattern in Java

It is a creational design pattern that talks about the creation of an object. The factory design pattern says to define an interface ( A java interface or an abstract class) for creating the object and let the subclasses decide which class to instantiate.

Important Topics for the Factory method design pattern in Java

  • What is the Factory Method Design Pattern in Java?
  • When to use Factory Method Design Pattern in Java?
  • Key Components of Factory Method Design Pattern
  • Factory Method Design Pattern Example in Java
  • Use Cases of the Factory Method Design Pattern in Java
  • Advantages of Factory Method Design Pattern in Java
  • Disadvantages of Factory Method Design Pattern in Java

Similar Reads

What is the Factory Method Design Pattern in Java?

Factory Method Design Pattern define an interface for creating an object, but let subclass decide which class to instantiate. Factory Method lets a class defer instantiation to subclass....

When to use Factory Method Design Pattern in Java?

Factory method design pattern can be used in java in following cases:...

Key Components of Factory Method Design Pattern

...

Factory Method Design Pattern Example in Java

Problem Statement...

Use Cases of the Factory Method Design Pattern in Java

...

Advantages of Factory Method Design Pattern in Java

...

Disadvantages of Factory Method Design Pattern in Java

Here are some common applications of the Factory Method Design pattern in Java:...

Conclusion

The advantages of Factory Method Design Pattern in Java are:...

Contact Us