Wzorzec projektowy Factory umożliwia tworzenie instancji konkretnych klas w warunkach zależności tylko od abstrakcyjnych interfejsów.

Aplikacja powinna korzystać tylko z interfejsu ShapeFactory (oczywiście tworząc obiekt ShapeFacoryImplementation). Następnie za pomocą Make powinna tworzyć instancje interfejsu Shape i wyłącznie za jego pośrednictwem wywoływać metody klas Circle czy Square.

Aby pozbyć się zależności od klas Circle i Square stworzono jedną metodę Make z parametrem (tradycyjnie byłyby to 2 metody MakeCircle, MakeSquare). Dzięki zastosowaniu interfejsu ShapeFactory można w łatwy sposób dodać kolejną fabrykę. Daje to możliwość korzystania z fabryk wymiennie.

public interface ShapeFactory
{
  Shape Make(string name);
}	

public class ShapeFactoryImplementation : ShapeFactory
{
  public Shape Make(string name)
  {
    if(name.Equals("Circle"))
      return new Circle();
    else if(name.Equals("Square"))
      return new Square();
    else
      throw new Exception(
        "ShapeFactory nie mogła utworzyć obiektu klasy {0}", name);
  }
}