Fabrika Yöntemi genellikle her durumda çağıran kod uygulaması hakkında kararlar almak için ihtiyaç asla böylece aynı kök arayüzü kullanarak, farklı bir sınıf döndüren bir anahtar deyimi göre kategorize edilir.
Her kart türü için farklı bir onaylayıcı döndüren bir kredi kartı doğrulama fabrikasını düşünün.
public ICardValidator GetCardValidator (string cardType)
{
switch (cardType.ToLower())
{
case "visa":
return new VisaCardValidator();
case "mastercard":
case "ecmc":
return new MastercardValidator();
default:
throw new CreditCardTypeException("Do not recognise this type");
}
}
Özet Fabrika farklı yöntemlerle birçok farklı türde döndürebilir bir arayüz elde edilen çoklu beton fabrikası sınıfları (değil Fabrika Yöntemleri) olduğu yerden.
Her değişken türü için farklı bir sınıfa sahip bir satranç oyun menajeri düşünün.
public class StandardChessRulesFactory : IChessRulesFactory
{
public IBoardMapper GetBoardMapper()
{
return new StandardChessBoardMapper();
}
public IKingMover GetKingMover()
{
return new StandardChessKingMover();
}
public IMoveClock GetMoveClock()
{
return new StandardMoveClock();
}
}
public class HexagonalChessRulesFactory : IChessRulesFactory
{
public IBoardMapper GetBoardMapper()
{
return new HexagonalChessBoardMapper();
}
public IKingMover GetKingMover()
{
return new HexagonalChessKingMover();
}
public IMoveClock GetMoveClock()
{
return new StandardMoveClock();
}
}
public class SpeedChessRulesFactory : IChessRulesFactory
{
public IBoardMapper GetBoardMapper()
{
return new StandardChessBoardMapper();
}
public IKingMover GetKingMover()
{
return new StandardChessKingMover();
}
public IMoveClock GetMoveClock()
{
return new SpeedChessMoveClock();
}
}
Bir Stratejiye çok benzeyen bir Soyut Fabrika, genellikle bir Fabrika Yöntemi kullanılarak seçilir, ancak bunları kendi kalıbı olması için birleştirmek gerekmez.