বিল্ডার প্যাটার্ন (Builder Pattern)


কি ? : একটি কমন ইন্টারফেসের মাধ্যমে এক বা একাধিক কমপ্লেক্স অবজেক্ট তৈরি করা । কেনো করব? :এমন অনেক সময় আসে যখন এপ্লিকেশনে ছোট ছোট অনেক গুলো অবজেক্ট নিয়ে একটি বড় অবজেক্ট বানানোর দরকার পড়ে । তখন Builder Pattern অনেক দরকারি হয়ে পড়ে। এর সাথে Abstract Factory Pattern এর বৈসাদৃশ্য হচ্ছে বড় অবজেক্ট বানানোর সময় প্রতিটা ধাপ আমরা নিজে ঠিক করে দেই । Abstract Factory Pattern এ আমরা শুধু ফাইনাল অবজেক্ট টা পেয়ে থাকি কোনও রকম স্টেপ ঠিক করে দেয়া ছাড়াই । উদাহরন : রিয়েল লাইফ এপ্লিকেশনের বিভিন্ন সমস্যা সহজে সমাধান করার জন্য নানান প্রকারের ডিজাইন প্যাটার্ন এর আবির্ভাব । আমাদের জীবনের নানা ঘটনাও কিন্তু ডিজাইন প্যাটার্নের আওতায় পড়ে । একটা উদাহরণ দেই তাহলেই বুঝতে পারবেন । ম্যারেজ মিডিয়া গুলোর কার্যকলাপ কিন্তু Builder Pattern এ ফেলা যায় । যেমন এখানে একজন ঘটক মশাই থাকবেন । যিনি নানা রকমের পাত্রপাত্রীর বায়োডাটা সংগ্রহ করেন । এবং পাত্রপাত্রীর পরিবারকে দেখান । সো , ঘটককে একটা ইন্টারফেস এ ফেলা যায় । যার কাজ হচ্ছে পাত্রীর ইনফরমেশন সংগ্রহ করা এবং একটা পাত্রী রিটার্ন করা । ইন্টারফেসটা কেমন হবে দেখি ফেলি আমরা ।

namespace Builder.Fun
{
    public interface IGhotok
    {
        Patri Patri { get; set; }//getter and setter for our patri
        //Ghotoker kaj
        void GetBabarTaka();
        void GetEducationStatus();
        void DekhteKemon();
        void JobStatus();
        void GetMonManosikota();
    }
}

এখন যেহেতু ঘটক মশাই পাত্রী রিটার্ন করেন সেহেতু আমরা পাত্রীর ক্লাস বানিয়ে ফেলি । পাত্রীর ক্লাসে পাত্রীর সব রকমের ইনফরমেশন থাকবে । যেমন

namespace Builder.Fun
{
    public class Patri
    {
        private readonly PatriType _patriType;

        public string BaperTake { get; set; }
        public string EducationStatus { get; set; }
        public string DekhteKemon { get; set; }
        public string JobStatus { get; set; }
        public string GetMonmanosikota { get; set; }
           public Patri(PatriType patriType)
        {

            _patriType = patriType;
        }

        public void DisplayPatrirConfiguration()
        {
            Console.WriteLine("Patri Type:" + _patriType);
            Console.WriteLine("Baper Taka:" + BaperTake);
            Console.WriteLine("Education Status:" + EducationStatus);
            Console.WriteLine("Dekhte Kemon:" + DekhteKemon);
            Console.WriteLine("Job Status:" + JobStatus);
            Console.WriteLine("Mon Manosikota:" + GetMonmanosikota);
        }

    }
}

আমাদের পাত্রী ক্লাশে একটা PatriType আছে এটা হচ্ছে enum
enum ব্যবহৃত হয় পাত্রীর টাইপগুলোরাখার জন্য । আমাদের enum হচ্ছে এরকম ।
মোটামুটি,কোনরকম চলে,সেইরকম পাত্রী
আছে (:P)

namespace Builder.Fun
{
    public enum PatriType
    {
        Motamuti,
        Chole,
        SeirokomValo
    }
}

আমরা IGhotok মশাইকে বানিয়েছিলাম পাত্রীর বায়োডাটা সংগ্রহ করতে ।  সেইরকম পাত্রীর বায়োডাটা কেমন করে বানালেন চলুন দেখে আসি ।

namespace Builder.Fun
{
    public class SeirokomPatri : IGhotok
    {
        public Patri Patri { get; set; }
        public SeirokomPatri()
        {
            Patri = new Patri(PatriType.SeirokomValo);
        }
        public void GetBabarTaka()
        {
            Patri.BaperTake = "Industrialist babar ekmatro meye !!! R kisu bolar asey??";
        }
        public void GetEducationStatus()
        {
            Patri.EducationStatus = "NSU theke BBA korse";
        }
        public void DekhteKemon()
        {
            Patri.DekhteKemon = "8-10 jon piche piche ghure";
        }
        public void JobStatus()
        {
            Patri.JobStatus = "Jobb kore na Business kore";
        }
        public void GetMonManosikota()
        {
            Patri.GetMonmanosikota = "Mardanga Type er High heel atitude";
        }
    }
}

নিছক মজা করার জন্য এরকম করে কোড করা হয়েছে । যাতে করে মনে থাকে 🙂 এখন MarriageAgency এর কাজ হচ্ছে পাত্রী সাপ্লাই দেয়া । SupplyPatri মেথডের মাধ্যমে যার আর্গুমেন্ট হচ্ছে IGhotok মশাই । (উনিই তো সব অঘটনের মুল তাই না ??) সাপ্লাই দেয়ার কাজ সম্পন্ন হয় এভাবে :

namespace Builder.Fun
{
    public class MarriageAgency
    {
        public void SupplyPatri(IGhotok patribuilder)
        {
            patribuilder.GetMonManosikota();
            patribuilder.GetBabarTaka();
            patribuilder.DekhteKemon();
            patribuilder.GetEducationStatus();
            patribuilder.JobStatus();
            patribuilder.GetMonManosikota();
        }
    }
}

এখন চলুন পাত্রের মায়ের কাছে পাত্রীর বায়োডাটা দেখিয়ে আসি । পছন্দ হয় কিনা

namespace Builder
{
    class Program
    {
        static void Main(string[] args)
        {
                  // ম্যারেজ এজেন্সি হাজির । 
            var marriageAgency = new MarriageAgency(); 
                 //ঘটক মশাই সেই রকম পাত্রীর খোজ এনেছেন । 
            IGhotok patrimaker = new SeirokomPatri();
             // এজেন্সি সাপ্লাই দিয়েছেন সেই রকম পাত্রী
            marriageAgency.SupplyPatri(patrimaker); 
             // পাত্রীর যাবতীয় গুণাবলী পরখ করছেন পাত্রেয় মা । 
           patrimaker.Patri.DisplayPatrirConfiguration();

        }
    }
}

রেজাল্ট :Result আমরা এখই ভাবে IGhotok মশাইকে দিয়ে মোটামুটি পাত্রী , কোনও রকম পাত্রী আমাদের আম্মুকে দেখাতে পারি । আমি খুব একটা গুছিয়ে লিখতে পারি না । ভালো লাগলে ফিডব্যাক জানালে উৎসাহ পাবো 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s