DEV Community

eidher
eidher

Posted on • Edited on

Factory Method Pattern

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
Alt Text

Participants

  • Product: defines the interface of objects the factory method creates.
  • ConcreteProduct: implements the Product interface
  • Creator: declares the factory method, which returns an object of type Product. Creator may also define a default implementation of the factory method that returns a default ConcreteProduct object. May call the factory method to create a Product object.
  • ConcreteCreator: overrides the factory method to return an instance of a ConcreteProduct.

Code

public class Main {

    public static void main(String[] args) {
        Creator[] creators = new Creator[2];

        creators[0] = new ConcreteCreatorA();
        creators[1] = new ConcreteCreatorB();

        for (Creator creator : creators) {
            Product product = creator.factoryMethod();
            System.out.println("Created " + product.getClass().getSimpleName());
        }

    }
}

public interface Product {

}

public class ConcreteProductA implements Product {

}

public class ConcreteProductB implements Product {

}

public interface Creator {

    Product factoryMethod();
}

public class ConcreteCreatorA implements Creator {

    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB implements Creator {

    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}
Enter fullscreen mode Exit fullscreen mode

Output

Created ConcreteProductA
Created ConcreteProductB
Enter fullscreen mode Exit fullscreen mode

Top comments (0)