ডিজাইন প্যাটার্নসের লেখকরা যে বিষয়ে সবচেয়ে বেশি উদ্বিগ্ন ছিলেন তা হ'ল "দর্শক" প্যাটার্ন।
এটি একটি "প্রয়োজনীয় মন্দ" - তবে প্রায়শই ব্যবহৃত হয় এবং এটির প্রয়োজনীয়তা আপনার নকশায় আরও একটি মৌলিক ত্রুটি প্রকাশ করে।
"ভিজিটর" প্যাটার্নটির বিকল্প নাম হ'ল "মাল্টি-প্রেরণ", কারণ আপনি যখন ভিজিটর প্যাটার্নটি শেষ করেন তখন আপনি যখন দ্বি প্রকারের উপর ভিত্তি করে ব্যবহার করতে কোডটি নির্বাচন করতে একক প্রকারের প্রেরণ OO ভাষা ব্যবহার করতে চান (বা আরও) বিভিন্ন বস্তু।
ক্লাসিক উদাহরণটি হ'ল আপনার দুটি আকারের মধ্যে ছেদ রয়েছে, তবে একটি আরও সাধারণ ক্ষেত্রে রয়েছে যা প্রায়শই উপেক্ষা করা হয়: দুটি ভিন্ন ভিন্ন বস্তুর সমতার তুলনা করে comp
যাইহোক, প্রায়শই আপনি এই জাতীয় কিছু দিয়ে শেষ করেন:
interface IShape
{
double intersectWith(Triangle t);
double intersectWith(Rectangle r);
double intersectWith(Circle c);
}
এটির সাথে সমস্যা হ'ল আপনি "ইশপে" এর সমস্ত বাস্তবায়ন একসাথে করেছেন। আপনি বোঝিয়ে গেছেন যে যখনই আপনি শ্রেণিবিন্যাসে একটি নতুন আকার যুক্ত করতে চান আপনার অন্য সমস্ত "আকার" বাস্তবায়নও পরিবর্তন করতে হবে।
কখনও কখনও, এটি সঠিক সর্বনিম্ন নকশা - তবে এটির মাধ্যমে চিন্তা করুন। আপনার ডিজাইনটি কি সত্যিই আদেশ দেয় যে আপনাকে দুটি ধরণের প্রেরণের প্রয়োজন? আপনি বহু-পদ্ধতির সংযুক্তি বিস্ফোরণের প্রতিটি লিখতে রাজি?
প্রায়শই, অন্য ধারণা প্রবর্তনের মাধ্যমে আপনি যে সংমিশ্রণগুলি লিখতে চান তা হ্রাস করতে পারবেন:
interface IShape
{
Area getArea();
}
class Area
{
public double intersectWith(Area otherArea);
...
}
অবশ্যই এটি নির্ভর করে - কখনও কখনও আপনাকে সেই সমস্ত বিভিন্ন ক্ষেত্রে পরিচালনা করার জন্য কোডটি লিখতে হবে - তবে এটি স্থগিত করা এবং ভিজিটর ব্যবহারের আগে বিরতি নেওয়া এবং চিন্তাভাবনা করা ভাল। এটি পরে আপনার প্রচুর ব্যথা বাঁচাতে পারে।