অবশ্যই, কিন্তু আমরা যে কল রচনা ও প্রতিনিধিদলের । কৌশল প্যাটার্ন এবং নির্ভরতা ইনজেকশন কাঠামোগতভাবে অনুরূপ মনে হতে পারে তবে তাদের উদ্দেশ্যগুলি পৃথক।
কৌশল প্যাটার্ন একই ইন্টারফেসের অধীনে আচরণের রানটাইম সংশোধন করার অনুমতি দেয়। আমি কোনও ম্যালার্ড হাঁসকে উড়তে ও ডানা দিয়ে উড়ে যাওয়ার জন্য বলতে পারতাম। তারপরে এটি একটি জেট পাইলট হাঁসের জন্য স্যুপ আউট করুন এবং এটি ডেল্টা এয়ারলাইন্সের সাথে বিমানটি দেখতে দেখুন। প্রোগ্রামটি চলাকালীন তা করা একটি কৌশল প্যাটার্ন জিনিস।
ডিপেন্ডেন্সি ইনজেকশন হ'ল হার্ড কোডিং নির্ভরতা এড়াতে এমন একটি কৌশল যাতে তারা ক্লায়েন্টদের পরিবর্তিত হলে সংশোধন করার প্রয়োজন ছাড়াই স্বাধীনভাবে পরিবর্তন করতে পারে। গ্রাহকরা কীভাবে তাদের পূরণ করা হবে তা না জেনে কেবল তাদের প্রয়োজনীয়তা প্রকাশ করেন। সুতরাং কীভাবে তাদের সাথে দেখা হয় তা অন্যত্র (সাধারণত প্রধানত) সিদ্ধান্ত নেওয়া হয়। এই কৌশলটি ব্যবহার করতে আপনার দুটি হাঁসের দরকার নেই। কোন কিছু যা হাঁসকে না জেনে বা যত্ন না করে হাঁস ব্যবহার করে। এমন কিছু যা হাঁসকে তৈরি করে না বা এটি সন্ধান করতে যায় না তবে আপনি যা কিছু হাঁসকে হস্তান্তর করেন তা ব্যবহার করে পুরোপুরি খুশি।
আমার যদি একটি কংক্রিট হাঁসের ক্লাস থাকে তবে আমি এটিতে উড়ে যাওয়ার আচরণটি বাস্তবায়িত করতে পারি। আমি এমনকি এটি একটি রাষ্ট্রের ভেরিয়েবলের উপর ভিত্তি করে ডানা-ডেল্টা-ও-ডানা থেকে ফ্লাই-উইং-উইংস থেকে ফ্লাই-তে আচরণগুলি স্যুইচ করতে পারি। এই পরিবর্তনশীলটি একটি বুলিয়ান, কোনও অন্তর্নিহিত হতে পারে, বা এটি FlyBehavior
এমন একটি fly
পদ্ধতি হতে পারে যা আমাকে যদি এটির সাথে পরীক্ষা না করেই উড়ন্ত শৈলীর যা কিছু করে তা করে। এখন আমি হাঁসের ধরণের পরিবর্তন না করেই উড়ানের শৈলীর পরিবর্তন করতে পারি। এখন ম্যালার্ডস পাইলট হতে পারেন। এটি রচনা এবং প্রতিনিধি দল । হাঁসটি একটি ফ্লাইবিভার থেকে গঠিত এবং এটি এতে বিমানের জন্য অনুরোধ পেশ করতে পারে। আপনি আপনার হাঁসের আচরণগুলি একবারে এই স্থানে প্রতিস্থাপন করতে পারেন বা প্রতিটি আচরণের জন্য কিছু বা কোনও সমন্বয়কে ধরে রাখতে পারেন hold
এটি আপনাকে উত্তরাধিকারের একটিকে বাদ দিয়ে সমস্ত শক্তি প্রদান করে। উত্তরাধিকার আপনাকে ডাক সাব টাইপগুলিতে কী কী হাঁসের পদ্ধতিগুলি ওভাররাইড করছে তা প্রকাশ করতে দেয়। রচনা ও প্রতিনিধি দলের শুরু থেকেই ডাকে স্পষ্টভাবে সাব-টাইপের প্রতিনিধিত্ব করা প্রয়োজন। এটি অনেক বেশি নমনীয় তবে এতে আরও কীবোর্ড টাইপ করা জড়িত এবং হাঁসের এটি ঘটছে তা জানতে হবে।
যাইহোক, অনেক লোক বিশ্বাস করেন যে উত্তরাধিকার প্রথম থেকেই স্পষ্টভাবে তৈরি করা উচিত। এবং এটি যদি না হয় তবে আপনার উত্তরাধিকারকে বঞ্চিত করার জন্য আপনার ক্লাসগুলি সিলড / ফাইনাল হিসাবে চিহ্নিত করা উচিত। যদি আপনি এই মতামতটি গ্রহণ করেন তবে রচনা ও প্রতিনিধি দলের চেয়ে উত্তরাধিকারের কোনও সুবিধা নেই। কারণ তখন যে কোনও উপায়ে আপনাকে শুরু থেকেই এক্সটেনসিবিলিটির জন্য নকশা তৈরি করতে হবে বা পরে জিনিস ছিঁড়ে দিতে ইচ্ছুক হতে হবে।
জিনিস ছিন্ন করা আসলে একটি জনপ্রিয় বিকল্প। কেবল সচেতন থাকুন যে এটির ক্ষেত্রেও এমন সমস্যা রয়েছে। আপনি যদি স্বাধীনভাবে লাইব্রেরি বা কোডের মডিউলগুলি স্থাপন করেছেন যা আপনি পরবর্তী প্রকাশের সাথে আপডেট করার ইচ্ছা করেন না তবে আপনি ক্লাসের সংস্করণগুলি নিয়ে কাজ করতে গিয়ে আটকাতে পারবেন যা আপনি এখন পর্যন্ত কিছুই জানেন না।
পরে জিনিসগুলি ছিঁড়ে ফেলতে ইচ্ছুক থাকাকালীন আপনাকে ডিজাইনের উপর থেকে মুক্ত করতে পারে এমন কিছু এমন কিছু নকশা করতে সক্ষম হচ্ছিল যা হাঁসের ব্যবহারের সময় হাঁস আসলে কী করবে তা না জেনে কিছু ব্যবহার করে। না জেনে রাখা শক্তিশালী জিনিস। এটি আপনাকে কিছুক্ষণ হাঁসের সম্পর্কে চিন্তাভাবনা বন্ধ করতে এবং আপনার বাকী কোড সম্পর্কে চিন্তা করতে দেয়।
"আমরা কি" এবং "আমাদের উচিত" আলাদা প্রশ্ন। উত্তরাধিকারের উপর পছন্দসই সংমিশ্রণ কখনও উত্তরাধিকার ব্যবহার করবেন না বলে বলে। এখনও এমন ঘটনা রয়েছে যেখানে উত্তরাধিকার সর্বাধিক অর্থপূর্ণ হয়। আমি আপনাকে আমার প্রিয় উদাহরণটি দেখাব :
public class LoginFailure : System.ApplicationException {}
উত্তরাধিকার আপনাকে কেবলমাত্র একটি লাইনে আরও নির্দিষ্ট, বর্ণনামূলক নাম সহ ব্যতিক্রম তৈরি করতে দেয় ceptions
রচনা দিয়ে এটি করার চেষ্টা করুন এবং আপনি একটি গোলযোগ পাবেন। এছাড়াও, উত্তরাধিকারের ইও-ইও সমস্যা হওয়ার ঝুঁকি নেই কারণ উত্তরাধিকার শৃঙ্খলা পুনরায় ব্যবহার এবং উত্সাহ দেওয়ার জন্য এখানে কোনও ডেটা বা পদ্ধতি নেই। এই সমস্ত যোগ করা একটি ভাল নাম। কখনও কোনও ভাল নামের মূল্যকে অবমূল্যায়ন করবেন না।
Duckbehavior.quackBehavior
আপনার কোডে এবং অন্যান্য ক্ষেত্রগুলির প্রকারগুলি কী ?