Abstract Factory pattern is used to generate multiple factory generators.
Check complete details and explanations about the Abstract Factory pattern in the article: Abstract Factory Design Pattern
This article demonstrates Abstract Factory pattern implementations in Java. Check the following examples.
Example #1: Transport
Let’s take the example of a transport system. Take a look at the class diagram first.

Transport Factory Interface
// Transport.java
package com.bigboxcode;
public interface Transport {
void start();
void stop();
void repair();
}
Bicycle Class
// Bicycle.java
package com.bigboxcode;
public class Bicycle implements Transport {
@Override
public void start() {
System.out.println("Bicycle Started");
}
@Override
public void stop() {
System.out.println("Bicycle Stopped");
}
@Override
public void repair() {
System.out.println("Bicycle Repair");
}
}
Motorcycle Class
// Motorcycle.java
package com.bigboxcode;
public class Motorcycle implements Transport {
@Override
public void start() {
System.out.println("Motorcycle Started");
}
@Override
public void stop() {
System.out.println("Motorcycle Stopped");
}
@Override
public void repair() {
System.out.println("Motorcycle Repair");
}
}
Car Class
// Car.java
package com.bigboxcode;
public class Car implements Transport {
@Override
public void start() {
System.out.println("Car Started");
}
@Override
public void stop() {
System.out.println("Car Stopped");
}
@Override
public void repair() {
System.out.println("Car Repair");
}
}
Truck Class
// Truck.java
package com.bigboxcode;
public class Truck implements Transport {
@Override
public void start() {
System.out.println("Truck Started");
}
@Override
public void stop() {
System.out.println("Truck Stopped");
}
@Override
public void repair() {
System.out.println("Truck Repair");
}
}
Abstract Transport Factory Interface
// AbstractTransportFactory.java
package com.bigboxcode;
public interface AbstractTransportFactory {
Transport getTransport(String type);
}
Two Wheel Transport Factory Class
// TwoWheelTransportFactory.java
package com.bigboxcode;
public class TwoWheelTransportFactory implements AbstractTransportFactory{
@Override
public Transport getTransport(String type) {
if (type.equalsIgnoreCase("bicycle")) {
return new Bicycle();
}
if (type.equalsIgnoreCase("motorcycle")) {
return new Motorcycle();
}
return null;
}
}
Four Wheel Transport Factory Class
// FourWheelTransportFactory.java
package com.bigboxcode;
public class FourWheelTransportFactory implements AbstractTransportFactory{
@Override
public Transport getTransport(String type) {
if (type.equalsIgnoreCase("car")) {
return new Car();
}
if (type.equalsIgnoreCase("truck")) {
return new Truck();
}
return null;
}
}
Factory Producer Class
// FactoryProducer.java
package com.bigboxcode;
public class FactoryProducer {
public static AbstractTransportFactory getFactory(int numberOfWheels) {
if (numberOfWheels == 2) {
return new TwoWheelTransportFactory();
}
if (numberOfWheels == 4) {
return new FourWheelTransportFactory();
}
return null;
}
}
Demo
// Main.java
package com.bigboxcode;
public class Main {
public static void main(String[] args) {
AbstractTransportFactory transportFactory1 = FactoryProducer.getFactory(2);
Transport transport1 = transportFactory1.getTransport("bicycle");
transport1.start();
AbstractTransportFactory transportFactory2 = FactoryProducer.getFactory(4);
Transport transport2 = transportFactory2.getTransport("truck");
transport2.start();
}
}
Output
Bicycle Started
Truck Started