কার্যকরী ভাষায় (লিস্পের মতো), আপনি তালিকার কোনও নির্দিষ্ট উপাদানের কী হয় তা নির্ধারণ করতে প্যাটার্ন মিল ব্যবহার করেন। সি # এর সমতুল্য যদি এর একটি শৃঙ্খল হয় ... অন্য বিবৃতিতে যে কোনও উপাদানটির প্রকারটি পরীক্ষা করে এবং তার উপর ভিত্তি করে একটি ক্রিয়াকলাপ সম্পাদন করে। বলা বাহুল্য, ফাংশনাল প্যাটার্ন মিলটি রানটাইম টাইপ চেকিংয়ের চেয়ে বেশি দক্ষ।
পলিমারফিজম ব্যবহার করা প্যাটার্ন মিলের আরও ঘনিষ্ঠ মিল match তা হল, তালিকার অবজেক্টগুলি একটি নির্দিষ্ট ইন্টারফেসের সাথে মিলে যায় এবং প্রতিটি বস্তুর জন্য সেই ইন্টারফেসে একটি ফাংশন কল করে। আরেকটি বিকল্প হ'ল ওভারলোডেড পদ্ধতিগুলির একটি সিরিজ সরবরাহ করা যা কোনও নির্দিষ্ট বস্তুর প্রকারকে প্যারামিটার হিসাবে গ্রহণ করে। ডিফল্ট পদ্ধতি অবজেক্টটিকে তার প্যারামিটার হিসাবে গ্রহণ করে।
public class ListVisitor
{
public void DoSomething(IEnumerable<dynamic> list)
{
foreach(dynamic obj in list)
{
DoSomething(obj);
}
}
public void DoSomething(SomeClass obj)
{
//do something with SomeClass
}
public void DoSomething(AnotherClass obj)
{
//do something with AnotherClass
}
public void DoSomething(Object obj)
{
//do something with everything els
}
}
এই পদ্ধতির সাথে লিস্প প্যাটার্ন মিলের একটি অনুমান সরবরাহ করা হয়। দর্শনার্থীর প্যাটার্ন (যেমন এখানে প্রয়োগ করা হয়েছে, ভিন্ন ভিন্ন তালিকার ব্যবহারের দুর্দান্ত উদাহরণ)। আর একটি উদাহরণ বার্তা প্রেরণের জন্য যেখানে সেখানে অগ্রাধিকারের সারিতে নির্দিষ্ট বার্তার জন্য শ্রোতা রয়েছে এবং দায়বদ্ধতার শৃঙ্খলা ব্যবহার করে, প্রেরণকারী বার্তাটি পাস করে এবং বার্তাটি মেলে এমন প্রথম হ্যান্ডলার এটি পরিচালনা করে।
ফ্লিপ সাইডটি প্রত্যেককে বার্তাটির জন্য নিবন্ধিত করার জন্য অবহিত করছে (উদাহরণস্বরূপ ইভেন্ট এমগ্রিগেটর প্যাটার্নটি সাধারণত এমভিভিএম প্যাটার্নে ভিউমোডেলগুলির looseিলে coupালা সংযোগের জন্য ব্যবহৃত হয়)। আমি নিম্নলিখিত নির্মাণ ব্যবহার
IDictionary<Type, List<Object>>
অভিধানে যুক্ত করার একমাত্র উপায় একটি ফাংশন
Register<T>(Action<T> handler)
(এবং অবজেক্টটি হ্যান্ডলারের পাসের ক্ষেত্রে আসলে একটি WeakReferences)। সুতরাং এখানে তালিকাটি <অবজেক্ট> ব্যবহার করার জন্য আমি এখানে রয়েছি কারণ সংকলনের সময়, আমি জানি না যে বন্ধ প্রকারটি কী হবে। রানটাইমে তবে আমি প্রয়োগ করতে পারি যে এটি সেই ধরণের হবে যা অভিধানের মূল কী। আমি যখন ইভেন্টটি কল করতে চাই তখন ফায়ার করতে চাই
Send<T>(T message)
এবং আবার আমি তালিকা সমাধান। তালিকাটি << ছায়ামানিক> ব্যবহার করার কোনও সুবিধা নেই কারণ আমার যাইহোক এটি কাস্ট করা দরকার। সুতরাং আপনি যেমন দেখেন উভয় পদ্ধতির গুণাবলী রয়েছে। যদি আপনি মেথড ওভারলোডিং ব্যবহার করে কোনও বস্তুকে গতিশীলভাবে প্রেরণ করতে চলেছেন তবে ডায়নামিকই এটি করার উপায়। যদি আপনি নির্বিশেষে castালাই করতে বাধ্য হন তবে পাশাপাশি অবজেক্টটি ব্যবহার করতে পারেন।