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
.
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
.
class
contains a get()
method. It uses a switch
statement to return a class
based on an id number.class
.Factory.get()
method. Get()
is static
so we need no Factory instance.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.
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.