কেন আমাদের বিমূর্ত কারখানার নকশার ধরণ দরকার?


124

সংজ্ঞা বেশিরভাগ বলে:

একটি বিমূর্ত কারখানাটি তাদের কংক্রিটের ক্লাসগুলি নির্দিষ্ট না করেই সম্পর্কিত সামগ্রীর পরিবার তৈরির জন্য একটি ইন্টারফেস সরবরাহ করে

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি কীভাবে ব্যবহার করা যায় কারণ আমরা নিজেরাই কংক্রিট শ্রেণীর অবজেক্ট তৈরির মাধ্যমে টাস্কটি অর্জন করতে পারি। কেন আমাদের কাছে একটি কারখানা পদ্ধতি আছে যা কংক্রিট বর্গের অবজেক্ট তৈরি করে?

দয়া করে আমাকে এমন কোনও বাস্তব জীবনের উদাহরণ সরবরাহ করুন যেখানে আমাকে বিমূর্ত কারখানার প্যাটার্ন প্রয়োগ করতে হবে?

উত্তর:


219

অ্যাবস্ট্রাক্ট ফ্যাক্টরি নির্ভরতা ইনজেকশন (ডিআই) জন্য খুব কেন্দ্রীয় ডিজাইন প্যাটার্ন । এখানে স্ট্যাক ওভারফ্লো প্রশ্নগুলির একটি তালিকা যেখানে সারাংশ কারখানার প্রয়োগের হয়েছে এর গৃহীত সমাধান হিসেবে।

আমার বোধগম্যতার জন্য, এই প্রশ্নগুলি মানুষের উদ্বেগ বা সমস্যাগুলির প্রতিনিধিত্ব করে, যাতে আপনার বাস্তব জীবনের কয়েকটি উদাহরণ দিয়ে শুরু করা উচিত:


6
এই সমস্ত উদাহরণ কারখানার পদ্ধতি প্যাটার্ন বর্ণনা করে, কারণ এগুলি সমস্তই একক পণ্য ইন্টারফেস দেয় return এর মধ্যে কোনও একটি অ্যাবস্ট্রাক্ট কারখানার প্যাটার্ন নয়, কারণ এগুলির মধ্যে কোনওই সম্পর্কিত পণ্য ইন্টারফেসের পরিবার তৈরি করে না।
jaco0646

32
সম্পূর্ণ প্রকাশের স্বার্থে, এই উত্তরের লেখককে পরিষ্কার করে দেওয়া উচিত ছিল যে তিনি সংযুক্ত প্রতিটি উত্তরের লেখকও; সুতরাং এই তালিকাটি এসও সম্প্রদায়ের কোনও প্রতিনিধি নমুনা নয়
jaco0646

1
@ জ্যাকো06466 আইআইআরসি, কারখানার পদ্ধতি প্যাটার্নটি টেম্পলেট পদ্ধতি প্যাটার্নের একটি বিশেষত্ব , যা উত্তরাধিকারের উপর নির্ভর করে। যদিও আমি বর্তমানে ভ্রমণ করছি, আমার ভুল হতে পারে এবং আমার সাথে আমার জিএফ বই নেই। "তাদের কেউই সম্পর্কিত পণ্য ইন্টারফেসের পরিবার তৈরি করে না" বলতে কী বোঝায়?
মার্ক সিমেন

1
কারখানাটি নির্দেশ করে এমন সরল সূত্রটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন অনুসারে মেনে চলে না কারখানাটি যে বিমূর্ত পণ্যগুলি উত্পাদন করে তা গণনা করা ("বিমূর্ত" শব্দের অতিরিক্ত ব্যবহার এড়ানোর জন্য আমি "বিমূর্ত পণ্যগুলির জায়গায়" "পণ্য ইন্টারফেস" শব্দটি ব্যবহার করেছি) । একটি ফ্যাক্টরি যা একটি একক বিমূর্ত পণ্য উত্পাদন করে তা একটি বিমূর্ত কারখানা হতে পারে না, কারণ সংজ্ঞা অনুসারে, অ্যাবস্ট্রাক্ট ফ্যাক্টরি সম্পর্কিত পণ্যগুলির একটি পরিবার উত্পাদন করে । এই পরিবারটি গুরুত্বপূর্ণ যে এটি একটি ইন্টারফেসের বিভিন্ন বাস্তবায়নকে উল্লেখ করে না, বরং বিভিন্ন, সম্পর্কিত ইন্টারফেসের পণ্যগুলিতে উল্লেখ করছে note
jaco0646

1
এখানে oodesign.com/abstract-factory-pattern.html এর একটি উদাহরণ । মূলত এটি বিমূর্ত কারখানার প্যাটার্নটি তৈরি করা হয়েছিল।
ব্যবহারকারী2802557

23

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন ব্যবহারের জন্য একটি বাস্তব জীবনের উদাহরণ দুটি পৃথক ডেটা উত্সগুলিতে ডেটা অ্যাক্সেস সরবরাহ করে। ধরুন আপনার অ্যাপ্লিকেশনটি বিভিন্ন ডেটা স্টোরকে সমর্থন করে। (যেমন একটি এসকিউএল ডাটাবেস এবং একটি এক্সএমএল ফাইল)। আপনার দুটি পৃথক ডেটা অ্যাক্সেস ইন্টারফেস রয়েছে উদাহরণস্বরূপ ব্যবহৃত ডেটা উত্সের ধরণের নির্বিশেষে আপনার অ্যাপ্লিকেশন দ্বারা প্রত্যাশিত সাধারণ পদ্ধতিগুলির একটি IReadableStoreএবং IWritableStoreসংজ্ঞা দেওয়া।

কোন ধরণের ডেটা সোর্স ব্যবহার করা উচিত তা ক্লায়েন্ট কোডটি তার ডেটা অ্যাক্সেস ক্লাসগুলি পুনরুদ্ধার করার উপায়টি পরিবর্তন করে না। তোমার AbstractDataAccessFactoryজানেন যা তথ্য উৎস ধরণ কনফিগার করা এবং উপলব্ধ কংক্রিট কারখানার ক্লায়েন্ট কোড, অর্থাত্ SqlDataAccessFactoryবা XmlDataAccessFactory। এই কংক্রিট কারখানাগুলি কংক্রিট বাস্তবায়ন যেমন, SqlReadableStoreএবং তৈরি করতে পারে SqlWriteableStore

.NET ফ্রেমওয়ার্কের DbProviderF কারখানা এই ধরণের উদাহরণ।


18
এই উত্তরটি সঠিকভাবে কারখানার পদ্ধতি প্যাটার্ন বা স্ট্যাটিক কারখানার প্যাটার্নটি বর্ণনা করতে পারে তবে অ্যাবস্ট্রাক্ট কারখানার প্যাটার্নটি নয়।
jaco0646

5

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


3

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি কীভাবে ব্যবহার করা যায় কারণ আমরা নিজেরাই কংক্রিট শ্রেণীর অবজেক্ট তৈরির মাধ্যমে টাস্কটি অর্জন করতে পারি। কেন আমাদের কাছে একটি কারখানা পদ্ধতি আছে যা কংক্রিট বর্গের অবজেক্ট তৈরি করে?

অ্যাবস্ট্রাক্ট কারখানার অনুপস্থিতিতে ক্লায়েন্টকে কংক্রিটের ক্লাসগুলির বিশদ জানতে হবে। এই আঁটসাঁট মিলনটি অ্যাবস্ট্রাক্ট কারখানার সাথে সরানো হয়েছে ।

এখন কারখানার পদ্ধতিটি একটি চুক্তি প্রকাশ করে, সেই ক্লায়েন্টটি ব্যবহার করতে হয়। আপনি নতুন পণ্য যুক্ত করে আপনার কারখানায় আরও পণ্য যুক্ত করতে পারেন, যা কারখানা পদ্ধতি দ্বারা প্রকাশিত ইন্টারফেস প্রয়োগ করে।

আরও ভাল বোঝার জন্য এই সম্পর্কিত এসই প্রশ্নগুলি দেখুন:

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

ইন্টেন্ট:

সম্পর্কিত বা নির্ভরশীল বস্তুর পরিবারগুলি তাদের কংক্রিটের ক্লাসগুলি নির্দিষ্ট না করে তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করুন।

আপনি বুঝতে পারেন ইন্টেন্ট, গঠন, চেকলিস্ট এবং চলতি নিয়ম এর সারাংশ কারখানার এই থেকে প্যাটার্ন sourcemaking নিবন্ধ।

চেকলিস্ট:

  1. প্ল্যাটফর্মের স্বাধীনতা এবং সৃষ্টি পরিষেবাগুলি বর্তমান ব্যথার উত্স কিনা তা স্থির করুন ।
  2. প্ল্যাটফর্ম বনাম পণ্যগুলির একটি ম্যাট্রিক্স তৈরি করুন ।
  3. একটি ফ্যাক্টরি ইন্টারফেস সংজ্ঞায়িত করুন যা প্রতি পণ্য ফ্যাক্টরি পদ্ধতি নিয়ে গঠিত।
  4. প্রতিটি প্ল্যাটফর্মের জন্য একটি কারখানা উত্পন্ন শ্রেণি সংজ্ঞায়িত করুন যা নতুন অপারেটরের সমস্ত রেফারেন্সকে আবদ্ধ করে।
  5. ক্লায়েন্ট নতুন সব রেফারেন্স অবসর, এবং ব্যবহার করা উচিত কারখানা পদ্ধতি তৈরি করতে পণ্যের বস্তু।

2

আপনার কোড-বেসকে অবিচ্ছিন্ন রাখার সময় একাধিক প্ল্যাটফর্মগুলিকে সমর্থন করার জন্য বিমূর্ত কারখানাগুলি দুর্দান্ত। ধরুন আপনার উইন্ডোজ, লিনাক্স এবং ওএসএক্সে চালাতে চান এমন একটি বৃহত কিউটি বা জিটিকে + বা। নেট / মনো প্রোগ্রাম রয়েছে। তবে আপনার একটি বৈশিষ্ট্য রয়েছে যা প্রতিটি প্ল্যাটফর্মে আলাদাভাবে প্রয়োগ করা হয় (সম্ভবত কার্নেল 32 এপিআই বা কোনও পসিক্স বৈশিষ্ট্যের মাধ্যমে)।

public abstract class Feature
{
    public abstract int PlatformSpecificValue { get; }

    public static Feature PlatformFeature
    {
        get
        {
            string platform;
            // do platform detection here
            if (platform == "Win32")
                return new Win32Feature();
            if (platform == "POSIX")
                return new POSIXFeature();
        }
    }

    // platform overrides omitted
}

এই অ্যাবস্ট্রাক্ট ফ্যাক্টরির সাহায্যে আপনার ইউআইয়ের বর্তমান প্ল্যাটফর্মটি সম্পর্কে কিছু জানার দরকার নেই।

Feature feature = Feature.PlatformFeature;
Console.WriteLine(feature.PlatformSpecificValue);

1
আমি এটি পাই না, ক্লায়েন্ট বাস্তবায়নের বিশদটি জানতে না পারার জন্য কোনও বিমূর্ত প্রকারটি ফেরত দেওয়ার জন্য কেবল কারখানার পদ্ধতি ব্যবহার করে কীভাবে এটি আলাদা?
কিউইকম্ব 123

1

আপনি যদি ডিজাইনের নিদর্শনগুলি লক্ষ্য করেন তবে প্রায় সবগুলিই অপ্রয়োজনীয় হতে পারে। তবে কী ধরণের অর্থ একই ধরণের সমস্যার সমাধানের জন্য সাধারণভাবে ব্যবহৃত পদ্ধতির। একটি ডিজাইনের ধরণ আপনাকে নকশার স্তরের পদ্ধতির জন্য অনুরূপ ধরণের ডিজাইনের সমস্যার সেট দেয়। ডিজাইনের প্যাটার্ন ব্যবহার করা আপনাকে আপনার সমস্যার সমাধান করতে সহায়তা করে এবং তাই দ্রুত সরবরাহ করে।


1

এটি সহজ, চিত্রায়নের যে আপনার এমন কোড রয়েছে যা বিমূর্তির সাথে কাজ করে, আপনার বিমূর্ততা তৈরি করা উচিত, কংক্রিটের ক্লাস নয়।

আপনার সর্বদা বিমূর্ততার বিরুদ্ধে কাজ করা উচিত কারণ আপনি কোডটি আরও ভালভাবে সংশোধন করতে পারেন।

এটি একটি ভাল উদাহরণ: http://en.wikedia.org/wiki/Abstract_factory_ Pattern#C.23


1

আমি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি ওভাররেড পেয়েছি।

প্রথমত, এটি এমনটি হয় না যে প্রায়শই আপনি আন্তঃসম্পর্কিত প্রকারের একটি সেট রাখেন যা আপনি ইনস্ট্যান্ট করতে চান।

দ্বিতীয়ত, নির্ভরতা ইনজেকশনের সাথে কাজ করার সময় ইন্টারফেসগুলির দ্বারা সরবরাহিত ইন্ডিরেশন (বিমূর্ততা) স্তরটি সাধারণত পর্যাপ্ত থাকে।

উইন্ডোজগুই বনাম ম্যাকগুই বনাম এর সাধারণ উদাহরণ ... যেখানে আপনার উইন্ডোজবটন, ম্যাকবটন, উইন্ডোজস্ক্রোলবার, ম্যাকস্ক্রোলবার ইত্যাদি রয়েছে সাধারণত কংক্রিট বোতাম, স্ক্রোলবার ইত্যাদি সংজ্ঞায়িত করে প্রয়োগ করা সহজ এবং ভিজিটর এবং / অথবা ইন্টারপ্রেটার প্যাটার্ন সরবরাহ করে আসল আচরণ


এটির জন্য একটি নির্দিষ্ট উদ্দেশ্য রয়েছে। নির্ভরতা ইনজেকশন সহ আপনি সম্মিলিত মূল থেকে আরও নীচে পরিষেবা লোকেটারগুলি চান না। পরিবর্তে আপনি একটি ইনজেকশনের বিমূর্ত কারখানাটি ব্যবহার করেন।
অ্যাডাম টিউলিপার - এমএসএফটি

2
ভাল ... ডিআই দিয়ে পরিষেবা লোকেটার ব্যবহার করা একটি অ্যান্টি প্যাটারেন। একটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি সর্বজনীন সমাধান যখন রানটাইম মান থেকে ডিপেন্ডেন্সী তৈরি করতে হয়।
TheMentor

1

আমি মনে করি যেগুলি যেখানে আপনার ইনস্ট্যান্টেশনগুলি খুব জটিল, খুব জটিল এবং একক কারখানার জন্য খুব খারাপ এবং ইউআই এর পক্ষে উপলব্ধি করা খুব জটিল নয় এমন জায়গাগুলিতে সরল কারখানার প্যাটার্নের পরিবর্তে অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের একটি জায়গা রয়েছে ..

ধরা যাক এটি একটি TYPE_A ব্র্যান্ড, একক শ্রেণি নয় .. ধরা যাক যে টাইপ-এ এর মতো 100 ধরণের অনুরূপ শ্রেণীর একটি পরিবার রয়েছে এবং আপনাকে তাদের কাছ থেকে একটি অবজেক্ট ইনস্ট্যান্ট করতে হবে। কল্পনা করুন যে অনেক অনুরূপ ধরণের অবজেক্টের ব্র্যান্ডের থেকে সঠিক অবজেক্টটি তৈরি করার জন্য একটি বিশদ পরিশীলিত তথ্যের প্রয়োজন রয়েছে এবং এই অবজেক্ট সত্তায় আপনাকে ঠিক কী প্যারামিটারগুলি টিউন করতে হবে এবং কীভাবে তাদের টিউন করতে হবে তা জানতে হবে।

এই ব্র্যান্ডের জন্য বিশেষ কারখানায় আমরা তাদের আলাদা করতে পারি এবং তা ইনস্ট্যান্টিয়েট করার সঠিক অবজেক্ট এবং কীভাবে এটি ইনস্ট্যান্ট করতে হয় তা পাই। আমরা জেনে নেব যে নেট থেকে ইনপুট অনুযায়ী (চলুন অনলাইন স্টোরে কী রঙ পাওয়া যায় তা বলা যাক), এবং অন্যান্য অ্যাপ্লিকেশন এবং পরিষেবাগুলি পটভূমিতে চলছে (ইউআইটি প্যারামিটারগুলি সে সম্পর্কে অবগত নয়)।

এবং সম্ভবত আগামীকাল আমাদের আরও একটি পরিবার থাকবে যাক টাইপ_বি এবং ইনস্ট্যান্ট করতে টাইপ_ সি। সুতরাং ইউআই-এর কাছে "যদি অন্যথায়" জানতে হবে যে ব্যবহারকারী কোনও "টাইপ_এ", "টাইপ_বি" বা "টাইপ_সি" চান - তবে কারখানার ক্লাসগুলি ঠিক কী ধরনের (পরিবার থেকে) তৈরি করতে হবে তা নির্ধারণ করবে এবং কীভাবে এটি টিউন করবেন - এর পরামিতিগুলিতে কী মান নির্ধারণ করতে হবে, বা এর ঠিকাদারকে পাঠাতে হবে। এই সমস্ত - অনেকগুলি পরামিতি অনুসারে যা ইউআই সচেতন নয়। এই সমস্ত কিছুই একক কারখানার শ্রেণীর জন্য খুব বেশি হবে।


0

আপনার প্রশ্নের সরাসরি উত্তর দিতে, আপনি সম্ভবত এই জাতীয় নকশার প্যাটার্নটি ব্যবহার না করেই পালিয়ে যেতে পারেন।

তবে মনে রাখবেন, বাস্তব-বিশ্বের বেশিরভাগ প্রকল্প বিকশিত হয় এবং আপনি আপনার প্রকল্পের ভবিষ্যত-প্রমাণ তৈরির জন্য একরকম এক্সটেনসিবিলিটি সরবরাহ করতে চান।

আমার নিজের অভিজ্ঞতা থেকে, বেশিরভাগ সময়, একটি কারখানা বাস্তবায়িত হয় এবং প্রকল্পটি বাড়ার সাথে সাথে এটি আরও জটিল ডিজাইনের ধরণগুলিতে যেমন একটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি হিসাবে পরিবর্তিত হয়।


0

সব নির্ভরতা সম্পর্কে। যদি আপনি আঁটসাঁটো দম্পতি এবং নির্ভরতা সম্পর্কে চিন্তা না করেন তবে আপনার কোনও বিমূর্ত কারখানার দরকার নেই। তবে আপনি কোনও অ্যাপ্লিকেশন লেখার সাথে সাথে এটি রক্ষণাবেক্ষণের প্রয়োজন হবে।


0

বলুন আপনি a.jar তৈরি করেছেন, এবং অন্য কেউ আপনার জার ব্যবহার করে এবং আপনার কোডে একটি নতুন কংক্রিট অবজেক্ট ব্যবহার করতে চায়। আপনি যদি বিমূর্ত কারখানাটি ব্যবহার না করে থাকেন তবে তাকে আপনার কোডটি সংশোধন করতে হবে বা আপনার কোডটি ওভাররাইট করতে হবে। তবে আপনি যদি বিমূর্ত কারখানাটি ব্যবহার করছেন তবে তিনি একটি ফ্যাক্টরি সরবরাহ করতে পারেন এবং আপনার কোডটিতে পাস করতে পারেন এবং সবকিছু ঠিক আছে।

পরিমার্জিত সংস্করণ: বেলো দৃশ্য বিবেচনা করুন else অন্য কেউ ফ্রেমওয়ার্ক লিখেছেন framework কাঠামোটিতে একটি বিমূর্ত কারখানা এবং কয়েকটি কংক্রিট কারখানা ব্যবহার করা হয় রান সময়ে প্রচুর পরিমাণে অবজেক্ট তৈরি করতে। সুতরাং আপনি সহজেই বিদ্যমান কাঠামোতে আপনার নিজস্ব কারখানাটি নিবন্ধন করতে পারেন এবং আপনার নিজের অবজেক্ট তৈরি করতে পারেন। ফ্রেমওয়ার্কটি পরিবর্তনগুলিতে বন্ধ রয়েছে এবং বিমূর্ত কারখানার প্যাটার্নের কারণে প্রসারিত করা এখনও সহজ।


0

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

সি # তে বিমূর্ত কারখানার প্যাটার্ন বোঝা এবং বাস্তবায়ন করা


0

রিয়েল লাইফের উদাহরণটি সিস্টেম.ডাটা.কমনের নেমস্পেসে সরবরাহ করা হয়েছে যেখানে অ্যাবস্ট্র্যাক্ট বেস ক্লাস রয়েছে যার মধ্যে ডিবি সংযোগ, ডিবিকম্যান্ড এবং ডিবিডাটা অ্যাডাপ্টার অন্তর্ভুক্ত রয়েছে এবং .NET ফ্রেমওয়ার্ক ডেটা সরবরাহকারী, যেমন System.Data.SqlClient এবং System.Data.OracleClient এর সাথে ভাগ করেছেন কোনও ডেভেলপারকে জেনেরিক ডেটা অ্যাক্সেস কোড লিখতে সক্ষম করুন যা কোনও নির্দিষ্ট ডেটা সরবরাহকারীর উপর নির্ভর করে না।

ডিবিপ্রভাইডার ফ্যাক্টরিগুলি ক্লাস একটি ডিবিপ্রভাইডার ফ্যাক্টরি ইনস্ট্যান্স তৈরির জন্য স্থির পদ্ধতি সরবরাহ করে। উদাহরণস্বরূপ সরবরাহকারীর তথ্য এবং রান সময় সরবরাহিত সংযোগ স্ট্রিংয়ের উপর ভিত্তি করে একটি সঠিক দৃ strongly়ভাবে টাইপ করা বস্তুটি দেয় returns

উদাহরণ:

 DataTable allProvidersTable = DbProviderFactories.GetFactoryClasses();

এখানে চিত্র বর্ণনা লিখুন

        /* Getting SqlClient family members */
        DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
        DbCommand dbCommand = dbProviderFactory.CreateCommand();
        DbConnection dbConnection = dbProviderFactory.CreateConnection();
        DbDataAdapter dbDataAdapter = dbProviderFactory.CreateDataAdapter();

        SqlClientFactory sqlClientFactory = (SqlClientFactory)dbProviderFactory;
        SqlConnection sqlConnection = (SqlConnection)dbConnection;
        SqlCommand sqlCommand = (SqlCommand) dbCommand;
        SqlDataAdapter sqlDataAdapter = (SqlDataAdapter) dbDataAdapter;

        /* Getting OracleClient family members*/
        dbProviderFactory = DbProviderFactories.GetFactory("System.Data.OracleClient");
        dbCommand = dbProviderFactory.CreateCommand();
        dbConnection = dbProviderFactory.CreateConnection();
        dbDataAdapter = dbProviderFactory.CreateDataAdapter();

        OracleClientFactory oracleClientFactory = (OracleClientFactory)dbProviderFactory;
        OracleConnection oracleConnection = (OracleConnection)dbConnection;
        OracleCommand oracleCommand = (OracleCommand)dbCommand;
        OracleDataAdapter oracleDataAdapter = (OracleDataAdapter)dbDataAdapter;

উদাহরণ-2 এখানে চিত্র বর্ণনা লিখুন

কোড সলিউশন আর্কিটেকচার এখানে চিত্র বর্ণনা লিখুন

কংক্রিট কারখানার উদাহরণ নীচে স্থির কারখানার পদ্ধতি ব্যবহার করে সরবরাহ করা হয়

public  class FurnitureProviderFactory
{
    public static IFurnitureFactory GetFactory(string furnitureType)
    {
        if (furnitureType == "Wood")
        {
            return new WoodenFurnitureFactory();
        }
        if (furnitureType == "Plastic")
        {
            return new PlasticFurnitureFactory();
        }
        throw new Exception("Undefined Furniture");
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.