প্রসঙ্গ
আমি অবজেক্টের শ্রেণিবিন্যাসের সাথে ব্যবহার করছি (একটি অভিব্যক্তি গাছ) একটি "সিউডো" ভিজিটর প্যাটার্ন (ছদ্ম, যেমন এটি ডাবল প্রেরণ ব্যবহার করে না):
public interface MyInterface
{
void Accept(SomeClass operationClass);
}
public class MyImpl : MyInterface
{
public void Accept(SomeClass operationClass)
{
operationClass.DoSomething();
operationClass.DoSomethingElse();
// ... and so on ...
}
}
এই নকশাটি অবশ্য প্রশ্নবিদ্ধ, মাইন্টারফেস বাস্তবায়নের সংখ্যাটি উল্লেখযোগ্য (50 ডলার বা তার বেশি) হওয়ায় আমার পক্ষে অতিরিক্ত ক্রিয়াকলাপগুলি যুক্ত করার প্রয়োজন হয়নি।
প্রতিটি বাস্তবায়ন স্বতন্ত্র (এটি একটি ভিন্ন অভিব্যক্তি বা অপারেটর), এবং কিছু সংমিশ্রণ (যেমন অপারেটর নোডগুলিতে অন্যান্য অপারেটর / লিফ নোড থাকবে)।
ট্র্যাভারসাল বর্তমানে গাছের মূল নোডে স্বীকৃতি অপারেশন কল করে সঞ্চালিত হয়, যার ফলে তার প্রতিটি শিশু নোডের কাছে স্বীকৃতি দেয়, যার ফলে ... এবং আরও ...
তবে এমন সময় এসেছে যখন আমার নতুন অপারেশন যুক্ত করা দরকার , যেমন সুন্দর মুদ্রণ:
public class MyImpl : MyInterface
{
// Property does not come from MyInterface
public string SomeProperty { get; set; }
public void Accept(SomeClass operationClass)
{
operationClass.DoSomething();
operationClass.DoSomethingElse();
// ... and so on ...
}
public void Accept(SomePrettyPrinter printer)
{
printer.PrettyPrint(this.SomeProperty);
}
}
আমি মূলত দুটি বিকল্প দেখতে পাচ্ছি:
- রক্ষণাবেক্ষণের ব্যয়ে (প্রতিটি বিকল্প নয়, আইএমএইচও) প্রতিটি ব্যয়িত শ্রেণিতে আমার ক্রিয়াকলাপের জন্য একটি নতুন পদ্ধতি যুক্ত করে একই নকশাটি রাখুন
- এক্সটেনসিবিলিটি ব্যয়ে "সত্য" দর্শনার্থী প্যাটার্নটি ব্যবহার করুন (কোনও বিকল্প নয়, যেমন আমি আরও বাস্তবায়নের পথে আসার প্রত্যাশা করি ...) সাথে দেখা দর্শন পদ্ধতির প্রায় 50+ ওভারলোড, প্রতিটি একটি নির্দিষ্ট প্রয়োগের সাথে মিলে যায় ?
প্রশ্ন
আপনি কি ভিজিটর প্যাটার্নটি ব্যবহার করে পুনঃনির্দেশ চান? অন্য কোনও প্যাটার্ন রয়েছে যা এই সমস্যাটি সমাধান করতে সহায়তা করতে পারে?
MyInterface
.. এই সমস্ত শ্রেণীর কি একটি অনন্য বাস্তবায়ন আছে DoSomething
এবং DoSomethingElse
? আমি দেখতে পাই না যেখানে আপনার দর্শনার্থী শ্রেণি আসলে শ্রেণিবিন্যাসকে অতিক্রম করে - facade
এই মুহূর্তে এটি আরও অনেকটা দেখতে লাগে ..