Java Factory Design Pattern

Implement the factory design pattern. Use a method to return a derived class.
Factory pattern. With design patterns, we formalize how classes are used together. This makes programs clearer and easier to develop—more organized.
In a factory, objects of a common derived type are returned. So we use a method, a factory method, to return classes that "extend" a common base class.
Example implementation. In this code, we create a hierarchy of classes: the Position abstract class is the base. And Manager, Clerk and Programmer extend that base class.

Factory: This class contains a get() method. It uses a switch statement to return a class based on an id number.


And: In the factory, derived types are returned. They are implicitly cast to the Position base class.

Main: We invoke the Factory.get() method. Get() is static so we need no Factory instance.

Java program that uses Factory design pattern abstract class Position { public abstract String getTitle(); } class Manager extends Position { public String getTitle() { return "Manager"; } } class Clerk extends Position { public String getTitle() { return "Clerk"; } } class Programmer extends Position { public String getTitle() { return "Programmer"; } } class Factory { public static Position get(int id) { // Return a Position object based on the id parameter. // ... All these classes "extend" Position. switch (id) { case 0: return new Manager(); case 1: case 2: return new Clerk(); case 3: default: return new Programmer(); } } } public class Program { public static void main(String[] args) { for (int i = 0; i <= 3; i++) { // Use Factory to get a Position for each id. Position p = Factory.get(i); // Display the results. System.out.println("Where id = " + i + ", position = " + p.getTitle()); } } } Output Where id = 0, position = Manager Where id = 1, position = Clerk Where id = 2, position = Clerk Where id = 3, position = Programmer
With a factory, we are creating an abstraction of the creation of classes. The inheritance mechanism, where derived types can be treated by their base class, is used.
Consider this. In massively complex programs, creating classes in many ways, throughout the code, may become complicated. With a factory, all this logic is in one place.
With organized, factory-based creation, class instantiation is easier to analyze and understand. It can be changed by editing just one method, not many code locations.
Dot Net Perls
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to