কারখানার পদ্ধতি সাধারণত একটি সুইচ বিবৃতি যেখানে প্রতিটি ক্ষেত্রে একটি ভিন্ন বর্গ ফেরৎ, যে কলিং কোড বাস্তবায়ন সম্পর্কে সিদ্ধান্ত নেওয়ার প্রয়োজন কখনোই একই রুট ইন্টারফেস ব্যবহার করে যাতে দ্বারা শ্রেণীকরণ করা হয়।
ক্রেডিট কার্ড যাচাইকারী কারখানার কথা চিন্তা করুন যা প্রতিটি কার্ডের ধরণের জন্য আলাদা বৈধকারক দেয়।
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();
}
}
একটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি, অনেকটা স্ট্র্যাটেজির মতো, প্রায়শই একটি কারখানা পদ্ধতি ব্যবহার করে বাছাই করা হয়, তবে এগুলি একত্রিত করার প্রয়োজন হয় না এটি এটি নিজস্ব নিজস্ব প্যাটার্ন is