Home
Map
Factory Design PatternImplement the factory design pattern. Use a method to return a derived class.
Java
This page was last reviewed on May 26, 2023.
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.
Info The Factor class contains a get() method. It uses a switch statement to return a class based on an id number.
Switch
And In the factory, derived types are returned. They are implicitly cast to the Position base class.
Here We invoke the Factory.get() method. Get() is static so we need no Factory instance.
static
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()); } } }
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.
C#VB.NETPythonGolangJavaSwiftRust
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on May 26, 2023 (edit).
Home
Changes
© 2007-2023 Sam Allen.