DEV Community

loading...
Cover image for Factory Method Design Pattern

Factory Method Design Pattern

Subhrodip Mohanta
Writing readable and scalable code that unites distributed systems to power your daily apps
・3 min read

This is a Creational Design Pattern under Gang of Four

Also known as

Virtual Constructor

Intent

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

Explanation

Real world example

Blacksmith manufactures weapons. Elves require Elvish weapons and orcs require Orcish weapons.
Depending on the customer at hand the right type of blacksmith is summoned.

In plain words

It provides a way to delegate the instantiation logic to child classes.

Wikipedia says

In class-based programming, the factory method pattern is a creational pattern that uses factory
methods to deal with the problem of creating objects without having to specify the exact class of
the object that will be created. This is done by creating objects by calling a factory method
— either specified in an interface and implemented by child classes, or implemented in a base
class and optionally overridden by derived classes—rather than by calling a constructor.

Programmatic Example

Taking our blacksmith example above. First of all we have a Blacksmith interface and some
implementations for it:

public interface Blacksmith {
  Weapon manufactureWeapon(WeaponType weaponType);
}

public class ElfBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return ELFARSENAL.get(weaponType);
  }
}

public class OrcBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return ORCARSENAL.get(weaponType);
  }
}
Enter fullscreen mode Exit fullscreen mode

When the customers come, the correct type of blacksmith is summoned and requested weapons are
manufactured:

var blacksmith = new ElfBlacksmith();
blacksmith.manufactureWeapon(WeaponType.SPEAR);
blacksmith.manufactureWeapon(WeaponType.AXE);
Enter fullscreen mode Exit fullscreen mode

Program output:

// Elven spear
// Elven axe
Enter fullscreen mode Exit fullscreen mode

Class diagram

alt text

Applicability

Use the Factory Method pattern when:

  • Class cannot anticipate the class of objects it must create.
  • Class wants its subclasses to specify the objects it creates.
  • Classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate.

Real world examples

Credits


Code can be found here

Find out about more design patterns from here

Credit to Original Authors of this post:

Discussion (0)