Factory Method Pattern

Factory Method Pattern - Example Implementation

First, create a Polygon interface

interface Polygon {
    String getType();
}

Next, create a few Polygon implementations like SquareTriangle, etc

class Square implements Polygon {
    String getType() { return "square"; }
}
class Triangle implements Polygon {
    String getType() { return "triangle"; }
}
interface PolygonFactoryMethod {
	Polygon polygonFactoryMethod(final int numberOfSides);
}

Factory Method Implementations and Uses Cases

Factory Method Implementation #1

class PolygonFactoryMethodImpl1 implements PolygonFactoryMethod {  	
	@Override
	Polygon polygonFactoryMethod(final int numberOfSides) {
    	if (numberOfSides == 3) {
        	Triangle triangle = new Triangle();
			// custom logic
			return triangle;
    	} else if (numberOfSides == 4) {
        	Square square = new Square();
			// customm logic
			return square
    	} else {
        	throw new RuntimeException("invalid input");
    	}
	}
}

Factory Method Implementation #2

class PolygonFactoryMethodImpl2 implements PolygonFactoryMethod {
	@Override
	Polygon polygonFactoryMethod(final int numberOfSides) {
    	if (numberOfSides == 3) {
        	Triangle triangle = new Triangle();
			// custom logic
			return triangle;
    	} else if (numberOfSides == 4) {
        	Square square = new Square();
			// customm logic
			return square
    	} else {
        	throw new RuntimeException("invalid input");
    	}
	}
}

Use case

static void main(String[] args) {
    var polygonFactoryMethod = new PolygonFactoryMethodImpl1();
    Polygon triangle = polygonFactoryMethod.polygonFactoryMethod(3);
 	Polygon square   = polygonFactoryMethod.polygonFactoryMethod(4);
    // ...
    System.out.println(triangle.getType()); // triangle
    System.out.println(square.getType());   // square
}

Use case

static void main(String[] args) {
    var polygonFactoryMethod = new PolygonFactoryMethodImpl2();
    Polygon triangle = polygonFactoryMethod.polygonFactoryMethod(3);
 	Polygon square   = polygonFactoryMethod.polygonFactoryMethod(4);
    // ...
    System.out.println(triangle.getType()); // triangle
    System.out.println(square.getType());   // square
}

Comparisons