আমি একটি প্রোগ্রামিং নিবন্ধ পড়ছিলাম এবং এটি ডেকরেটর প্যাটার্ন উল্লেখ করেছে। আমি কিছুক্ষণের জন্য প্রোগ্রামিং করছি তবে কোনও ধরণের প্রথাগত শিক্ষা বা প্রশিক্ষণ ছাড়াই, তবে আমি স্ট্যান্ডার্ড ধরণগুলি এবং এগুলি সম্পর্কে জানার চেষ্টা করছি।
তাই আমি ডেকরেটারের দিকে চেয়েছিলাম এবং এটিতে একটি উইকিপিডিয়া নিবন্ধ পেয়েছি found আমি এখন ডেকরেটর প্যাটার্নের ধারণাটি বুঝতে পারি, তবে এই উত্তরণে আমি কিছুটা বিভ্রান্ত হয়েছিলাম:
উদাহরণস্বরূপ, উইন্ডোটিং সিস্টেমের একটি উইন্ডো বিবেচনা করুন। উইন্ডোটির বিষয়বস্তুগুলিকে স্ক্রোল করার অনুমতি দেওয়ার জন্য আমরা যথাযথভাবে এটিতে অনুভূমিক বা উল্লম্ব স্ক্রোলবারগুলি যুক্ত করতে পারি। ধরুন উইন্ডোগুলি উইন্ডো শ্রেণীর উদাহরণগুলির দ্বারা উপস্থাপিত হয়েছে এবং ধরে নিন যে এই শ্রেণীর স্ক্রোলবারগুলি যুক্ত করার জন্য কোনও কার্যকারিতা নেই। আমরা একটি সাবক্লাস স্ক্রোলিং উইন্ডো তৈরি করতে পারি যা সেগুলি সরবরাহ করে অথবা আমরা একটি স্ক্রলিং উইন্ডোডেকোরেটর তৈরি করতে পারি যা বিদ্যমান উইন্ডো অবজেক্টগুলিতে এই কার্যকারিতা যুক্ত করে। এই মুহুর্তে, উভয় সমাধান ভাল হবে।
এখন ধরে নেওয়া যাক আমরা আমাদের উইন্ডোতে সীমানা যুক্ত করার ক্ষমতাও কামনা করি। আবার, আমাদের মূল উইন্ডো শ্রেণীর কোনও সমর্থন নেই। স্ক্রলিং উইন্ডো সাবক্লাসে এখন একটি সমস্যা রয়েছে, কারণ এটি কার্যকরভাবে একটি নতুন ধরণের উইন্ডো তৈরি করেছে। আমরা যদি সমস্ত উইন্ডোয় সীমান্ত সমর্থন যুক্ত করতে চাই, আমাদের অবশ্যই সাবক্লাস উইন্ডো উইথবোর্ডার এবং স্ক্রলিং উইন্ডো উইথবোর্ডার তৈরি করতে হবে। স্পষ্টতই, প্রতিটি নতুন বৈশিষ্ট্য যুক্ত হওয়ার সাথে এই সমস্যাটি আরও খারাপ হয়। সাজসজ্জার সমাধানের জন্য, আমরা সহজভাবে একটি নতুন বর্ডারওয়াইন্ডো ডেকোরেটর তৈরি করি run রানটাইমের সময় আমরা বিদ্যমান উইন্ডোগুলি স্ক্রলিং উইন্ডো ডেকরেটর বা বর্ডারওয়াইন্ডো ডেকোরেটর বা উভয় দিয়ে সজ্জিত করতে পারি, যেমনটি আমরা উপযুক্ত দেখি।
ঠিক আছে, যখন তারা সমস্ত উইন্ডোতে সীমানা যুক্ত করতে বলবে, তবে কেন বিকল্পটির জন্য অনুমতি দেওয়ার জন্য মূল উইন্ডো শ্রেণিতে কার্যকারিতা যুক্ত করবেন না? আমি যেভাবে দেখছি তা হল, সাবক্লাসিং কেবল একটি শ্রেণিতে নির্দিষ্ট কার্যকারিতা যুক্ত করার জন্য, বা শ্রেণি পদ্ধতিতে ওভাররাইড করার জন্য। যদি আমার বিদ্যমান সমস্ত বস্তুগুলিতে কার্যকারিতা যুক্ত করার প্রয়োজন হয় তবে আমি কেন এটি করতে সুপারক্লাসটি সংশোধন করব না?
নিবন্ধে আরও একটি লাইন ছিল:
ডেকোরেটর প্যাটার্ন সাবক্লাসিংয়ের বিকল্প is সাবক্লাসিং সংকলনের সময় আচরণ যুক্ত করে এবং পরিবর্তনটি মূল শ্রেণীর সমস্ত উদাহরণকে প্রভাবিত করে; সাজসজ্জা পৃথক বস্তুর জন্য রান-টাইমে নতুন আচরণ সরবরাহ করতে পারে।
তারা যেখানে বলে সেখানে আমি পাই না "... পরিবর্তনটি মূল শ্রেণীর সমস্ত উদাহরণকে প্রভাবিত করে" - সাবক্লাসিং কীভাবে প্যারেন্ট ক্লাসকে পরিবর্তন করে? এটি কি সাবক্লাসিংয়ের পুরো বিন্দু নয়?
আমি ধরে নিতে চলেছি যে অনেক উইকের মতো নিবন্ধটিও কেবল পরিষ্কারভাবে লেখা হয়নি not আমি সেই শেষ লাইনে সাজসজ্জারটির কার্যকারিতা দেখতে পাচ্ছি - "... স্বতন্ত্র বস্তুর জন্য রান-টাইমে নতুন আচরণ সরবরাহ করুন।"
এই প্যাটার্নটি সম্পর্কে না পড়ে, যদি আমার পৃথক অবজেক্টগুলির জন্য রান-টাইমে আচরণ পরিবর্তন করার প্রয়োজন হয়, আমি সম্ভবত সম্ভবত আচরণটি সক্ষম / অক্ষম করার জন্য সুপার- বা সাবক্লাসে কিছু পদ্ধতি তৈরি করতাম। দয়া করে আমাকে সাজসজ্জারটির কার্যকারিতা বুঝতে সত্যই সহায়তা করুন এবং আমার নবাগত চিন্তা কেন ত্রুটিযুক্ত?