Example. The factory design pattern relies on a type hierarchy. The classes must all implement an interface or derive from a base class. We use an abstract class as the base. The Manager, Clerk and Programmer classes derive from Position.
Interface
Abstract
Get This method takes a value and instantiate a class based on that value. It translates integers to objects with a switch statement.
Switch
Abstract Because Manager, Clerk, and Programmer all derive from the same abstract class, the return type Position can be used.
Cast An implicit cast automatically casts the Manager, Clerk and Programmer to Position references.
Main We use the Get method with the values 0, 1, 2, and 3. We show that the appropriate type of class was instantiated for each integer.
C# program that uses factory pattern
using System;
class Program
{
abstract class Position
{
public abstract string Title { get; }
}
class Manager : Position
{
public override string Title
{
get
{
return
"Manager";
}
}
}
class Clerk : Position
{
public override string Title
{
get
{
return
"Clerk";
}
}
}
class Programmer : Position
{
public override string Title
{
get
{
return
"Programmer";
}
}
}
static class Factory
{
/// <summary>
/// Decides which class to instantiate.
/// </summary>
public static Position Get(int id)
{
switch (id)
{
case 0:
return new Manager();
case 1:
case 2:
return new Clerk();
case 3:
default:
return new Programmer();
}
}
}
static void Main()
{
for (int i = 0; i <= 3; i++)
{
var position = Factory.Get(i);
Console.WriteLine(
"Where id = {0}, position = {1} ", i, position.Title);
}
}
}
Where id = 0, position = Manager
Where id = 1, position = Clerk
Where id = 2, position = Clerk
Where id = 3, position = Programmer
Discussion. Imagine you have a system that needs to create objects in many different places. Suppose the system has integers and you want objects for those integers. The factory pattern is ideal for this usage.
Tip You can use the Factory type to handle object creation in a uniform and concise way.