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(); } } |
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(); } } |
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
Contact Us