CodeGym/Java Course/মডিউল 3/জেনারেটিভ প্যাটার্ন

জেনারেটিভ প্যাটার্ন

বিদ্যমান

3.1 সিঙ্গেলটন

Singleton হল একটি জেনেরিক ডিজাইন প্যাটার্ন যা গ্যারান্টি দেয় যে একটি একক-থ্রেডেড অ্যাপ্লিকেশনে কিছু শ্রেণীর একটি একক দৃষ্টান্ত থাকবে এবং এই উদাহরণে একটি বিশ্বব্যাপী অ্যাক্সেস পয়েন্ট প্রদান করে।

সিঙ্গেলটন

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

একটি বিকল্প হিসাবে, একটি সিঙ্গলটন ক্লাস সমাধান প্রস্তাব করা হয়েছিল: একটি শ্রেণী যেখানে শুধুমাত্র একটি বস্তু থাকতে পারে। এই বস্তুটি তৈরি করার চেষ্টা করার সময়, এটি শুধুমাত্র তখনই তৈরি করা হয় যদি এটি ইতিমধ্যে বিদ্যমান না থাকে, অন্যথায় ইতিমধ্যে বিদ্যমান উদাহরণের একটি রেফারেন্স ফেরত দেওয়া হয়।

এটা অপরিহার্য যে ক্লাসের একটি উদাহরণ ব্যবহার করা সম্ভব, যেহেতু অনেক ক্ষেত্রে ব্যাপক কার্যকারিতা পাওয়া যায়। উদাহরণস্বরূপ, এই শ্রেণীটি কিছু ইন্টারফেস বাস্তবায়ন করতে পারে এবং এর বস্তুটি ইন্টারফেসের বাস্তবায়ন হিসাবে অন্যান্য পদ্ধতিতে প্রেরণ করা যেতে পারে। স্ট্যাটিক পদ্ধতির একটি সেট দিয়ে কি করা যায় না।

সুবিধা:

  • পদ্ধতিগুলি একটি অবজেক্টের সাথে আবদ্ধ, একটি স্ট্যাটিক ক্লাস নয় - আপনি রেফারেন্স দ্বারা একটি বস্তু পাস করতে পারেন।
  • বস্তু পদ্ধতি পরীক্ষা এবং উপহাস অনেক সহজ.
  • একটি বস্তু শুধুমাত্র প্রয়োজন হলে তৈরি করা হয়: অলস অবজেক্ট ইনিশিয়ালাইজেশন।
  • প্রোগ্রামের প্রাথমিক প্রবর্তনকে ত্বরান্বিত করা যদি এমন অনেক একক থাকে যা লঞ্চের জন্য প্রয়োজন হয় না।
  • একাটিকে আরও একটি টেমপ্লেট-কৌশল বা এই জাতীয় বেশ কয়েকটি বস্তুতে পরিণত করা যেতে পারে।

বিয়োগ:

  • আন্তঃ-থ্রেড রেস এবং বিলম্ব নিয়ন্ত্রণ করা আরও কঠিন হয়ে ওঠে।
  • মাল্টি-থ্রেডেড "একাকী" "মাথা থেকে" লেখা কঠিন: একটি দীর্ঘস্থায়ী সিঙ্গলটনে অ্যাক্সেস, আদর্শভাবে, একটি মিউটেক্স খোলা উচিত নয়। ভাল প্রমাণিত সমাধান.
  • একটি অসমাপ্ত একক থ্রেড নিয়ে দুটি থ্রেডের মধ্যে একটি বিরোধের ফলে বিলম্ব হবে৷
  • যদি দীর্ঘ সময়ের জন্য অবজেক্ট তৈরি করা হয়, বিলম্ব ব্যবহারকারীর সাথে হস্তক্ষেপ করতে পারে বা বাস্তব সময় ব্যাহত করতে পারে। এই ক্ষেত্রে, এটির নির্মাণটি প্রোগ্রাম শুরুর পর্যায়ে স্থানান্তর করা ভাল।
  • ইউনিট পরীক্ষার জন্য বিশেষ বৈশিষ্ট্যগুলির প্রয়োজন - উদাহরণস্বরূপ, লাইব্রেরিটিকে "অ-নিঃসঙ্গ" মোডে রাখা এবং একে অপরের থেকে পরীক্ষাগুলি সম্পূর্ণ আলাদা করা৷
  • সমাপ্ত প্রোগ্রামটি পরীক্ষা করার জন্য একটি বিশেষ কৌশল প্রয়োজন, কারণ এমনকি "সরলতম লঞ্চযোগ্যতা" ধারণাটি অদৃশ্য হয়ে যায়, কারণ লঞ্চযোগ্যতা কনফিগারেশনের উপর নির্ভর করে।

3.2 কারখানা [পদ্ধতি]

একটি ফ্যাক্টরি পদ্ধতি হল একটি জেনেরিক ডিজাইন প্যাটার্ন যা একটি নির্দিষ্ট শ্রেণীর উদাহরণ তৈরি করার জন্য একটি ইন্টারফেসের সাথে সাবক্লাস (ক্লাস-উত্তরাধিকারী) প্রদান করে। সৃষ্টির সময়, বংশধররা নির্ধারণ করতে পারে কোন শ্রেণী তৈরি করতে হবে।

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

কারখানা পদ্ধতি

এই প্যাটার্নটি একটি অবজেক্ট তৈরি করার জন্য একটি ইন্টারফেসকে সংজ্ঞায়িত করে, কিন্তু অবজেক্টের উপর ভিত্তি করে কোন ক্লাসের উপর ভিত্তি করে তা নির্ধারণ করতে এটিকে সাবক্লাসে ছেড়ে দেয়। একটি কারখানা পদ্ধতি একটি শ্রেণীকে সাবক্লাস তৈরির দায়িত্ব অর্পণ করতে দেয়। ব্যবহার করা হয় যখন:

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

3.3 বিমূর্ত কারখানা

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

প্যাটার্নটি একটি বিমূর্ত ক্লাস ফ্যাক্টরি তৈরি করে প্রয়োগ করা হয়, যা সিস্টেমের উপাদান তৈরির জন্য একটি ইন্টারফেস (উদাহরণস্বরূপ, একটি উইন্ডো ইন্টারফেসের জন্য, এটি উইন্ডো এবং বোতাম তৈরি করতে পারে)। তারপর ক্লাস লেখা হয় যে এই ইন্টারফেস বাস্তবায়ন.

বিমূর্ত কারখানা

এটি এমন ক্ষেত্রে ব্যবহার করা হয় যেখানে প্রোগ্রামটি প্রক্রিয়া এবং নতুন বস্তুর প্রকারের থেকে স্বাধীন হতে হবে। যখন একই প্রসঙ্গে এইগুলির বিভিন্ন সেট থেকে বস্তুর একযোগে ব্যবহারের সম্ভাবনা বাদ দিয়ে সম্পর্কিত বস্তুর পরিবার বা গোষ্ঠী তৈরি করা প্রয়োজন।

শক্তি:

  • নির্দিষ্ট ক্লাস বিচ্ছিন্ন করে;
  • পণ্য পরিবারের প্রতিস্থাপন সহজতর;
  • পণ্য সামঞ্জস্য নিশ্চিত করে।

ধরা যাক আপনার প্রোগ্রাম ফাইল সিস্টেমের সাথে কাজ করে। তারপর লিনাক্সে কাজ করার জন্য আপনার প্রয়োজন LinuxFile, LinuxDirectory, LinuxFileSystem অবজেক্ট। এবং Windwos এ কাজ করার জন্য, আপনার WindowsFile, WindowsDirectory, WindowsFileSystem ক্লাস প্রয়োজন।

Path ক্লাস, যা Path.of() এর মাধ্যমে তৈরি করা হয়েছে ঠিক এমন একটি কেস। পাথ আসলে একটি ক্লাস নয়, কিন্তু একটি ইন্টারফেস, এবং এতে WindowsPath এবং LinuxPath বাস্তবায়ন রয়েছে। এবং কি ধরনের অবজেক্ট তৈরি করা হবে তা আপনার কোড থেকে লুকানো আছে এবং রানটাইমে সিদ্ধান্ত নেওয়া হবে।

3.4 প্রোটোটাইপ

প্রোটোটাইপ একটি জেনারেটিভ ডিজাইন প্যাটার্ন।

এই প্যাটার্নটি একটি প্রোটোটাইপ ইনস্ট্যান্স ব্যবহার করে তৈরি করা বস্তুর ধরনের সংজ্ঞায়িত করে এবং এই প্রোটোটাইপটি অনুলিপি করে নতুন বস্তু তৈরি করে। এটি আপনাকে বাস্তবায়ন থেকে দূরে যেতে এবং "ইন্টারফেসের মাধ্যমে প্রোগ্রামিং" নীতি অনুসরণ করতে দেয়।

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

প্রোটোটাইপ

প্যাটার্ন ব্যবহার করা হয়:

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

এই ডিজাইন প্যাটার্নটি ব্যবহার করুন যখন আপনার প্রোগ্রাম এটি কীভাবে পণ্য তৈরি করে, রচনা করে এবং উপস্থাপন করে তা চিন্তা করে না:

  • তাত্ক্ষণিক ক্লাসগুলি রান টাইমে নির্ধারিত হয়, উদাহরণস্বরূপ, গতিশীল লোডিং ব্যবহার করে;
  • আপনি বিল্ডিং ক্লাস বা ফ্যাক্টরি শ্রেণীবিন্যাস এড়াতে চান যা পণ্য শ্রেণীর অনুক্রমের সমান্তরাল;
  • ক্লাসের দৃষ্টান্তগুলি বিভিন্ন রাজ্যের একটিতে হতে পারে। প্রতিবার উপযুক্ত অবস্থায় ক্লাসটিকে ম্যানুয়ালি ইনস্ট্যান্টিয়েট করার পরিবর্তে উপযুক্ত সংখ্যক প্রোটোটাইপ সেট করা এবং তাদের ক্লোন করা আরও সুবিধাজনক হতে পারে।
1
কাজ
মডিউল 3,  লেভেল 16পাঠ 2
লক করা আছে
Turnkey Universe
task4106
1
কাজ
মডিউল 3,  লেভেল 16পাঠ 2
লক করা আছে
Personnel Forge
task4107
1
কাজ
মডিউল 3,  লেভেল 16পাঠ 2
লক করা আছে
Personnel Factories
task4108
1
কাজ
মডিউল 3,  লেভেল 16পাঠ 2
লক করা আছে
Prototypes
task4109
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই