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);
}
}