Factory pattern helps to generate object by choosing one class from a bunch of classes. The class is chosen by some predefined criteria.
Check complete details and explanations about the Factory pattern in the article: Factory Design Pattern
This article demonstrates 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.
Class Diagram

Transport Factory Interface
// Transport.java
package com.bigboxcode.designpattern.factory.transport;
public interface Transport {
void start();
void stop();
void repair();
}
Bike Class
// Bike.java
package com.bigboxcode.designpattern.factory.transport;
public class Bike implements Transport {
@Override
public void start() {
System.out.println("Bike started");
}
@Override
public void stop() {
System.out.println("Bike Stopped");
}
@Override
public void repair() {
System.out.println("Bike Repair");
}
}
Car Class
// Car.java
package com.bigboxcode.designpattern.factory.transport;
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");
}
}
Plane Class
// Plane.java
package com.bigboxcode.designpattern.factory.transport;
public class Plane implements Transport {
@Override
public void start() {
System.out.println("Plane started");
}
@Override
public void stop() {
System.out.println("Plane Stopped");
}
@Override
public void repair() {
System.out.println("Plane Repair");
}
}
Transport Factory Class
// TransportFactory.java
package com.bigboxcode.designpattern.factory.transport;
public class TransportFactory {
public Transport getTransport(String type) {
if (type == null) {
return null;
}
if (type.equalsIgnoreCase("bike")) {
return new Bike();
}
if (type.equalsIgnoreCase("car")) {
return new Car();
}
if (type.equalsIgnoreCase("plane")) {
return new Plane();
}
return null;
}
}
Demo
// Demo.java
package com.bigboxcode.designpattern.factory.transport;
public class Demo {
public static void main(String[] args) {
TransportFactory transportFactory = new TransportFactory();
Transport transport1 = transportFactory.getTransport("bike");
transport1.start();
Transport transport2 = transportFactory.getTransport("car");
transport2.start();
Transport transport3 = transportFactory.getTransport("plane");
transport3.start();
}
}
Output
Bike started
Car started
Plane started
Example #2: Transport [Factory Method]
Transport Interface
// Transport.java
package com.bigboxcode.designpattern.factory.transportmethod;
public interface Transport {
void start();
void stop();
void repair();
}
Bus Concrete Item Class
// Bus.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class Bus implements Transport {
@Override
public void start() {
System.out.println("Bus started");
}
@Override
public void stop() {
System.out.println("Bus Stopped");
}
@Override
public void repair() {
System.out.println("Bus Repair");
}
}
Bike Concrete Item Class
// Bike.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class Bike implements Transport {
@Override
public void start() {
System.out.println("Bike started");
}
@Override
public void stop() {
System.out.println("Bike Stopped");
}
@Override
public void repair() {
System.out.println("Bike Repair");
}
}
Car Concrete Item Class
// Car.java
package com.bigboxcode.designpattern.factory.transportmethod;
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");
}
}
Plane Concreate Item Class
// Plane.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class Plane implements Transport {
@Override
public void start() {
System.out.println("Plane started");
}
@Override
public void stop() {
System.out.println("Plane Stopped");
}
@Override
public void repair() {
System.out.println("Plane Repair");
}
}
Helicopter Concrete Item Class
// Helicopter.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class Helicopter implements Transport {
@Override
public void start() {
System.out.println("Helicopter started");
}
@Override
public void stop() {
System.out.println("Helicopter Stopped");
}
@Override
public void repair() {
System.out.println("Helicopter Repair");
}
}
Transport Factory Abstract Class
// TransportFactory.java
package com.bigboxcode.designpattern.factory.transportmethod;
public abstract class TransportFactory {
public void operateTransport(String name) {
Transport transport = getTransport(name);
transport.start();
transport.stop();
}
public void repairTransport(String name) {
Transport transport = getTransport(name);
transport.repair();
}
public abstract Transport getTransport(String name);
}
Road Transport Factory
// RoadTransportFactory.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class RoadTransportFactory extends TransportFactory {
@Override
public Transport getTransport(String name) {
if (name.equalsIgnoreCase("car")) {
return new Car();
}
if (name.equalsIgnoreCase("bike")) {
return new Bike();
}
if (name.equalsIgnoreCase("bus")) {
return new Bus();
}
return null;
}
}
Air Transport Factory
// AirTransportFactory.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class AirTransportFactory extends TransportFactory {
@Override
public Transport getTransport(String name) {
if (name.equalsIgnoreCase("plane")) {
return new Plane();
}
if (name.equalsIgnoreCase("helicopter")) {
return new Helicopter();
}
return null;
}
}
Demo
// Demo.java
package com.bigboxcode.designpattern.factory.transportmethod;
public class Demo {
public static void main(String[] args) {
TransportFactory roadTransportFactory = new RoadTransportFactory();
TransportFactory airTransportFactory = new AirTransportFactory();
roadTransportFactory.operateTransport("bus");
System.out.println("---------------------------------------");
airTransportFactory.operateTransport("helicopter");
System.out.println("---------------------------------------");
roadTransportFactory.repairTransport("bike");
}
}
Output
Bus started
Bus Stopped
---------------------------------------
Helicopter started
Helicopter Stopped
---------------------------------------
Bike Repair
Source Code
Use the following link to get the source code: