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