Factory Method
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.
Problem
A framework needs to standardize the architectural model for a range of
applications, but allow for individual applications to define their own
domain objects and provide for their instantiation.
Discussion
Factory Method is to creating objects as Template Method is to
implementing an algorithm. A superclass specifies all standard and
generic behavior (using pure virtual "placeholders" for creation
steps), and then delegates the creation details to subclasses that are
supplied by the client.
Factory Method makes a design more customizable and only a little more
complicated. Other design patterns require new classes, whereas
Factory Method only requires a new operation. [GOF, p136]
People often use Factory Method as the standard way to create objects;
but it isn't necessary if: the class that's instantiated never changes,
or instantiation takes place in an operation that subclasses can easily
override (such as an initialization operation). [GOF, p136]
Factory Method is similar to Abstract Factory but without the emphasis
on families.
Factory Methods are routinely specified by an architectural framework,
and then implemented by the user of the framework.
Structure
Example
The Factory Method defines an interface for creating objects, but lets
subclasses decide which classes to instantiate. Injection molding
presses demonstrate this pattern. Manufacturers of plastic toys
process plastic molding powder, and inject the plastic into molds of
the desired shapes. The class of toy (car, action figure, etc.) is
determined by the mold. [Michael Duell, "Non-software examples of
software design patterns", Object Magazine, Jul 97, p54]
Non-software example
Rules of thumb
Abstract Factory classes are often implemented with Factory Methods,
but they can be implemented using Prototype. [GOF, p95]
Factory Methods are usually called within Template Methods. [GOF,
p116]
Factory Method: creation through inheritance. Prototype: creation
through delegation.
Often, designs start out using Factory Method (less complicated, more
customizable, subclasses proliferate) and evolve toward Abstract
Factory, Prototype, or Builder (more flexible, more complex) as the
designer discovers where more flexibility is needed. [GOF, p136]
Prototype doesn't require subclassing, but it does require an
Initialize operation. Factory Method requires subclassing, but doesn't
require Initialize. [GOF, p116]
C++ Demos | Lab