আপনি কীভাবে অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন এবং ডিজাইনের ধরণগুলিতে কারখানার পদ্ধতি প্যাটার্নের মধ্যে পার্থক্যটি মনে রাখবেন?
উত্তর 1:
কারখানার নকশার প্যাটার্ন:
- এটি ক্রিয়েশনাল ডিজাইন প্যাটার্নের আওতায় পড়ে F কারখানার প্যাটার্ন বলছে যে ইনপুট প্রকারটি ব্যবহার করে অন্য শ্রেণি দ্বারা অবজেক্ট তৈরি করা হবে।
সুবিধাদি:
- এটি আলগা-মিলনের অনুমতি দেয়।
কারখানা ডিজাইনের প্যাটার্নটি কখন ব্যবহার করবেন?
- কারখানার নকশার ধরণটি ব্যবহার করা হয় যখন আমাদের একাধিক সাব-ক্লাস সহ একটি সুপারক্লাস থাকে এবং ইনপুটটির উপর ভিত্তি করে আমাদের সাব-ক্লাসের একটি ফিরিয়ে নেওয়া দরকার x উদাহরণ: যদি কোনও রেস্তোঁরা ভেজি খাবার, ভোজনহীন খাবার এবং ইতালিয়ান খাবার পরিবেশন করে। ভেগফুড, ননভিগফুড এবং ইতালিয়ানফুডকে তিনটি শ্রেণি হিসাবে চিকিত্সা করুন যার সুপারক্লাসটি খাদ্য I যদি কোনও গ্রাহক "Veg" জিজ্ঞাসা করেন তবে কারখানার পদ্ধতিটি "VegFood" শ্রেণিটি ফিরিয়ে আনবে।
উদাহরণ:
পদক্ষেপ 1: একটি বিমূর্ত শ্রেণীর "খাদ্য" তৈরি করুন যার "বিলপারপারসন" এবং "আইটেম" নামে দুটি ভেরিয়েবল রয়েছে।
পাবলিক বিমূর্ত শ্রেণি খাদ্য { সুরক্ষিত ডাবল বিলপার্পারসন; সুরক্ষিত সেট আইটেম; পাবলিক ফুড (ডাবল বিল পার্পারসন) { this.billPerPerson = billPerPerson; this.items = নতুন হ্যাশসেট <> (); } পাবলিক ডাবল getBill () { রিটার্ন বিলপার্পারসন; } পাবলিক সেট getItems () { ফেরত মালামাল; } }
পদক্ষেপ 2: বিমূর্ত শ্রেণি "খাদ্য" বর্ধিত করে এমন কংক্রিট ক্লাস তৈরি করুন
পাবলিক ক্লাস VegFood খাবার প্রসারিত করে { পাবলিক VegFood () { সুপার (100); items.add ( "অলসভাবে"); items.add ( "দোসা"); items.add ( "Vada"); } } পাবলিক ক্লাস ননভিগফুড খাবার প্রসারিত করে { সর্বজনীন ননভিগফুড () { সুপার (120); items.add ( "বিরিয়ানী"); items.add ("চিকেন 65"); } }
পদক্ষেপ 3: একটি FoodServer তৈরি করুন যা তথ্যের উপর ভিত্তি করে কংক্রিটের জন্য একটি অবজেক্ট তৈরি করার জন্য একটি ফ্যাক্টরি শ্রেণি:
পাবলিক ক্লাস FoodServer { পাবলিক স্ট্যাটিক ফুড গেটফুড (স্ট্রিং ফুড টাইপ) { যদি (FoodType.equals ("veg")) { নতুন VegFood () ফিরিয়ে দিন; } অন্যথায় যদি (FoodType.equals ("non veg")) { নতুন ননভিগফুড () ফিরিয়ে দিন; } আর { System.out.println ("আমরা পরিবেশন করছি না" + ফুড টাইপ); প্রত্যাবর্তন নাল; } } }
পদক্ষেপ 4: প্রধান শ্রেণীর "গ্রাহক" খাদ্য ধরণের উপর ভিত্তি করে প্রয়োজনীয় খাদ্য পেতে।
পাবলিক ক্লাস গ্রাহক { পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) { খাদ্য গ্রাহক 1ফুড = ফুডসবার সার্ভিস.বেগফুড ("veg"); System.out.println ( "Customer1"); System.out.println ("আইটেম:" + গ্রাহক 1ফুড.জেট আইটেম ()। টু স্ট্রিং ()); System.out.println ("বিল:" + গ্রাহক 1ফুড.সেটবিল ()); খাদ্য গ্রাহক 2ফুড = ফুডসবার সার্ভিস। System.out.println ( "Customer1"); System.out.println ("আইটেম:" + গ্রাহক 2ফুড.জেটআইটেম ()। টু স্ট্রিং ()); System.out.println ("বিল:" + গ্রাহক 2ফুড.সেটবিল ()); } }
বিমূর্ত কারখানা ডিজাইনের প্যাটার্ন:
- এটি ক্রিয়েশনাল ডিজাইনের প্যাটার্নের আওতায় পড়ে concrete এটি সম্পর্কিত বা নির্ভরশীল জিনিসের পরিবারগুলিকে তাদের কংক্রিটের ক্লাস নির্দিষ্ট না করে তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করে b অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নগুলি একটি সুপার কারখানা যা ইনপুটটির ভিত্তিতে সেরা ফ্যাক্টরিটি ফিরিয়ে দেবে t এটি কারখানার কারখানা হিসাবে কাজ করে .কোন কারখানায় ফিরে আসবে তা জেনে ক্লায়েন্টকে বিমূর্ত করে তোলে।
বাস্তব জীবনের উদাহরণ:
- একটি বড় কারখানা বিবেচনা করুন যিনি সাবান প্রস্তুত করেন hat এই কারখানাটি সাবানগুলির জন্য প্রয়োজনীয় সমস্ত জিনিস উত্পাদন করে না t এতে অনেকগুলি সাব-কারখানা রয়েছে যা "সাবান বার", "সাবানের মোড়ক" ইত্যাদি উত্পাদন করে এবং সমস্ত কিছু একত্রিত করা হবে I প্রধান কারখানা দ্বারা।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি ডিজাইন প্যাটার্নটি কখন ব্যবহার করবেন?
- ক্লায়েন্টকে কীভাবে বস্তুগুলি তৈরি করা হয় এবং যার জন্য শ্রেণীর অবজেক্ট তৈরি করা হয় তার থেকে পৃথক হওয়া উচিত when যখন শ্রেণীর পরিবার থেকে কোনও বিষয় তৈরি করা দরকার তখন এটি সহায়ক।
দ্রষ্টব্য: এটি বিভ্রান্তিকর হতে পারে তাই এই পৃষ্ঠার শেষে আমি এমবেড করা ভিডিওগুলি দেখুন।
উদাহরণ:
ধাপ 1:
- "কোর্স" নামে একটি ইন্টারফেস তৈরি করুন।
পাবলিক ইন্টারফেস কোর্স { পাবলিক স্ট্রিং getCourseName (); }
ধাপ ২:
- কংক্রিট ক্লাস তৈরি করুন যা "কোর্স" ইন্টারফেস প্রয়োগ করে।
পাবলিক ক্লাস প্রোগ্রামিংকোর্স কোর্স প্রয়োগ করে { @অগ্রাহ্য করা পাবলিক স্ট্রিং getCourseName () { "জাভা" ফিরে; } } পাবলিক ক্লাস ননপ্রোগ্রামিংকোর্স কোর্স প্রয়োগ করে { @অগ্রাহ্য করা পাবলিক স্ট্রিং getCourseName () { "ডিএসপি" ফিরিয়ে দিন; } }
ধাপ 3:
- "উত্স" নামে একটি ইন্টারফেস তৈরি করুন।
পাবলিক ইন্টারফেস উত্স { পাবলিক স্ট্রিং getSourceName (); }
ধাপ 4:
- কংক্রিট ক্লাস তৈরি করুন যা "উত্স" ইন্টারফেস প্রয়োগ করে।
পাবলিক ক্লাস অফলাইন উত্স প্রয়োগ করে { @অগ্রাহ্য করা পাবলিক স্ট্রিং getSourceName () { "বই" ফেরত; } } পাবলিক ক্লাস অনলাইন উত্স প্রয়োগ করে { @অগ্রাহ্য করা পাবলিক স্ট্রিং getSourceName () { "ইউটিউব" ফিরিয়ে দিন; } }
পদক্ষেপ 5:
- "সোর্সকোর্সফ্যাক্টরি" একটি বিমূর্ত শ্রেণি তৈরি করুন।
সোর্সকোর্স ফ্যাক্টরি সর্বজনীন বিমূর্ত শ্রেণি { সর্বজনীন বিমূর্ত উত্স getSource (স্ট্রিং উত্স টাইপ); পাবলিক অ্যাবস্ট্রাক্ট কোর্স getCourse (স্ট্রিং কোর্স টাইপ); }
পদক্ষেপ::
- একটি কারখানার শ্রেণি তৈরি করুন "কোর্সফ্যাক্টরি" যা "উত্সকোর্সফ্যাক্টরি" প্রসারিত
পাবলিক ক্লাস কোর্সফ্যাক্টরি সোর্সকোর্সফ্যাক্ট্রি প্রসারিত করে { @অগ্রাহ্য করা সর্বজনীন উত্স getSource (স্ট্রিং উত্স টাইপ) { প্রত্যাবর্তন নাল; } @অগ্রাহ্য করা পাবলিক কোর্স getCourse (স্ট্রিং কোর্স টাইপ) { যদি (courseType.equalsIgnoreCase ( "প্রোগ্রামিং")) { নতুন প্রোগ্রামিংকোর্স () প্রদান; } অন্যথায় যদি (courseType.equalsIgnoreCase ("নন প্রোগ্রামিং")) { নতুন ননপ্রোগ্রামিংকোর্স () প্রদান করুন; } আর { প্রত্যাবর্তন নাল; } } }
পদক্ষেপ 7:
- একটি কারখানার শ্রেণি তৈরি করুন "উত্স কারখানা" যা "উত্সকোর্সফ্যাক্টরি" প্রসারিত করে
পাবলিক ক্লাস সোর্সফ্যাক্টরি সোর্সকোর্সফ্যাক্ট্রি প্রসারিত করে { @অগ্রাহ্য করা সর্বজনীন উত্স getSource (স্ট্রিং উত্স টাইপ) { যদি (sourceType.equalsIgnoreCase ( "অনলাইন")) { নতুন অনলাইনে ফিরে (); } অন্যথায় যদি (SourceType.equalsIgnoreCase ("অফলাইন")) থাকে { নতুন অফলাইন ফিরে (); } আর { প্রত্যাবর্তন নাল; } } @অগ্রাহ্য করা পাবলিক কোর্স getCourse (স্ট্রিং কোর্স টাইপ) { প্রত্যাবর্তন নাল; } }
পদক্ষেপ 8:
- রিয়েল ফ্যাক্টরি ক্লাস অবজেক্টটি পেতে অ্যাবস্ট্রাক্ট ফ্যাক্টরি ক্লাসকে কল করে এমন একটি প্রধান শ্রেণীর তৈরি করুন এবং তারপরে এটি অন্যান্য ক্রিয়াকলাপ সম্পাদনের জন্য সেই অবজেক্টটি ব্যবহার করে।
পাবলিক ক্লাস উদাহরণমেন { পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) { সোর্সকোর্সফ্যাক্টরি কোর্স = ফ্যাক্টরিক্রিটার.জেটসোর্সকোর্সফ্যাক্টরি ("কোর্স"); System.out.println (course.getCourse ( "প্রোগ্রামিং") getCourseName ()।); সোর্সকোর্সফ্যাক্টরি উত্স = ফ্যাক্টরিক্রিটার.জেটসোর্সকোর্সফ্যাক্টরি ("উত্স"); System.out.println (source.getSource ( "অনলাইন") getSourceName ()।); } }