โดยทั่วไปแล้ววิธีการของโรงงานจะถูกจัดประเภทตามคำสั่งสลับที่แต่ละกรณีส่งคืนคลาสที่ต่างกันโดยใช้รูทอินเทอร์เฟซเดียวกันเพื่อให้รหัสการโทรไม่จำเป็นต้องตัดสินใจเกี่ยวกับการนำไปใช้
นึกถึงโรงงานตรวจสอบบัตรเครดิตที่ส่งคืนเครื่องมือตรวจสอบที่แตกต่างกันสำหรับบัตรแต่ละประเภท
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");
}
}
โรงงานบทคัดย่อเป็นที่ที่คุณต้องเรียนโรงงานคอนกรีตหลาย ๆ (ไม่ได้โรงงานวิธีการ) ที่ได้มาจากอินเตอร์เฟซที่หนึ่งซึ่งอาจจะกลับมาชนิดที่แตกต่างจากวิธีการที่แตกต่างกัน
ลองนึกถึงตัวจัดการเกมหมากรุกที่มีคลาสที่แตกต่างกันสำหรับกฎชุดต่างๆแต่ละชุด
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();
}
}
Abstract Factory ซึ่งคล้ายกับกลยุทธ์มักถูกเลือกโดยใช้วิธีการของโรงงาน แต่ไม่จำเป็นต้องรวมเข้าด้วยกันจึงเป็นรูปแบบของตัวเอง