Home / Design Pattern / Creational / Factory Method

Factory Method Design Pattern in Java

A parent class has a method that creates an object. Each child class decides which object to create. The main code never says new Truck() or new Ship().

Real life example

A logistics company delivers by road or by sea. Each branch picks its own vehicle.

When to use

You do not know in advance which exact class you will need, and you want subclasses to decide.

Complete Java example

Save this as Main.java, then run javac Main.java and java Main.

public class Main {
    public static void main(String[] args) {
        new SeaLogistics().planDelivery();                 // Deliver by sea
    }
}

interface Transport { void deliver(); }
class Truck implements Transport { public void deliver() { System.out.println("Deliver by road"); } }
class Ship  implements Transport { public void deliver() { System.out.println("Deliver by sea"); } }

abstract class Logistics {
    abstract Transport createTransport();          // the factory method
    void planDelivery() { createTransport().deliver(); }
}
class RoadLogistics extends Logistics { Transport createTransport() { return new Truck(); } }
class SeaLogistics  extends Logistics { Transport createTransport() { return new Ship(); } }

Output

Deliver by sea