কারখানার প্যাটার্ন এবং বিমূর্ত কারখানার মধ্যে পার্থক্য কী?


40

অবশেষে কিছু বেসিক প্যাটার্নগুলি শিখার জন্য গুরুত্ব সহকারে শুরু করার পরে (ক্যারিয়ারের খুব দেরিতে, তবে এটি একটি আলাদা গল্প), আমি কারখানা প্যাটার্ন এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরির মধ্যে পার্থক্যগুলি ঘিরে আমার মাথা পেতে চেষ্টা করছি।

এই দুটি নিদর্শন মধ্যে মূল পার্থক্য কি?

আমি বুঝতে পারি যে ফ্যাক্টরি পদ্ধতিটি উত্তরাধিকারের মাধ্যমে অবজেক্ট তৈরি করে এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরি এটি অবজেক্ট কম্পোজিশনের মাধ্যমে করে তবে ব্যবহারিক দৃষ্টিকোণ থেকে এখনও তারা প্রতিটি কাজ ঠিক কীভাবে করতে পারে তা দেখতে আমার সমস্যা হচ্ছে।



2
পরিষ্কার করার জন্য, আপনি যখন "ফ্যাক্টরি প্যাটার্ন" বলছেন তখন আপনার অর্থ কি "কারখানার পদ্ধতি"? যদি আপনি গ্যাং অফ ফোর প্যাটার্নের কথা বলছেন তবে কোনও কারখানার প্যাটার্ন নেই, তবে অ্যাবস্ট্রাক্ট কারখানা এবং কারখানার পদ্ধতি রয়েছে।
টমাস ওভেনস

হ্যাঁ - কারখানার পদ্ধতি।
ফিলিওহিলার

3
মোটামুটি, দুটি শব্দগুচ্ছটি দেখতে বেশিরভাগ ক্ষেত্রে একসাথে পরিবর্তিত হয়।
ফিলিওহিলার

1
আহ, কারখানার পদ্ধতি। সত্য নয় যে newকোনও পদ্ধতি নয় (কিছুতে - স্বীকৃত সাধারণ - অবজেক্ট সিস্টেম)।
ডোনাল ফেলো

উত্তর:


44

কারখানার পদ্ধতি সাধারণত একটি সুইচ বিবৃতি যেখানে প্রতিটি ক্ষেত্রে একটি ভিন্ন বর্গ ফেরৎ, যে কলিং কোড বাস্তবায়ন সম্পর্কে সিদ্ধান্ত নেওয়ার প্রয়োজন কখনোই একই রুট ইন্টারফেস ব্যবহার করে যাতে দ্বারা শ্রেণীকরণ করা হয়।

ক্রেডিট কার্ড যাচাইকারী কারখানার কথা চিন্তা করুন যা প্রতিটি কার্ডের ধরণের জন্য আলাদা বৈধকারক দেয়।

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


3
কারখানা পদ্ধতির ব্যাখ্যাটি কি সঠিক? কী সম্পর্কে "কারখানা পদ্ধতি প্যাটার্নটি উত্তরাধিকারের উপর নির্ভর করে, কারণ অবজেক্ট তৈরি সাব-ক্লাসগুলিতে অর্পিত হয় যা বস্তু তৈরির জন্য কারখানা পদ্ধতি প্রয়োগ করে"। সুতরাং উদাহরণটি আরও স্ট্যাটিক কারখানার মতো।
সার্জ

@ সার্জ ওয়েল, ন্যায্যতার সাথে, আপনি উইকিপিডিয়া থেকে এই উক্তিটি তুলেছেন, এমন একটি পৃষ্ঠাতে যা তিন বছর আগে খুব আলাদাভাবে পড়েছিল। আমি যুক্তি দিয়ে বলব যে বর্তমান উইকিপিডিয়া পৃষ্ঠাটি বেশ কয়েকটি জায়গায় নিজের সাথে স্ববিরোধী, তবে এটিকে বাছাইয়ে আমার জড়িত হওয়ার ইচ্ছা আমার নেই। আমি যে বিষয়টি স্বীকার করতে চাইছি তা হ'ল আমি এখানে যে উদাহরণটি প্রদান করেছি তা হ'ল একটি নির্দিষ্ট ধরণের কারখানা পদ্ধতি যা প্যারামিটারাইজড ফ্যাক্টরি পদ্ধতি হিসাবে পরিচিত। তবে ফ্যাক্টরি পদ্ধতি এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরির মধ্যে পার্থক্য সম্পর্কে বিন্দুটি সমস্ত ধরণের কারখানা পদ্ধতিতে জুড়ে।
pdr

2
আমার উক্তি হিসাবে একই বিবৃতিটি জিওএফ "ডিজাইন প্যাটার্নস" এ বিদ্যমান। এবং সেখানে প্যারামিটারাইজড এফএমও বর্ণিত হয়েছে।
সার্জ

গুরুত্বপূর্ণ অংশটি হ'ল কারখানাটি নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে কলারকে উপযুক্ত উপকরণ দেয় এবং ফোনকারীকে object বস্তুর সঠিক শ্রেণিটি কী তা জানার প্রয়োজন হয় না এবং নির্দিষ্ট বস্তুটি কীভাবে তা জানার দরকার নেই নির্বাচিত ছিল, যতক্ষণ না অবজেক্ট একটি ইন্টারফেস সমর্থন করে যা কলার জেনে থাকে।
gnasher729

আপনার উত্তরে আপনার পরিষ্কার থাকা উচিত যে আপনার উদাহরণটি কোনও আদর্শ কারখানা পদ্ধতি নয়, তবে প্যারামিটারাইজড কারখানা পদ্ধতি হিসাবে কিছু বিশেষজ্ঞকরণ রয়েছে। এবং আদর্শ কারখানা পদ্ধতির সংজ্ঞা সম্পর্কে লিখুন, কারণ এটি এখনই বিভ্রান্ত হচ্ছে। আমি কেবল ফ্যাক্টরি পদ্ধতি প্যাটার্ন সম্পর্কে শিখছিলাম, আমি সমস্ত কিছু বুঝতে পেরেছিলাম এবং তারপরে আমি সেই উত্তরটি পড়েছিলাম যা কারখানার পদ্ধতির প্যাটার্নটিকে কিছু আলাদা হিসাবে দেখায় এবং আমি বিভ্রান্ত হয়ে পড়েছিলাম। উদাহরণটি কারখানার সাধারণ পদ্ধতিতে আদর্শ নয় বলে কোনও তথ্য নেই। মন্তব্যে তা উল্লেখ করার জন্য সার্জকে ধন্যবাদ।
ctomek
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.