এর আগেরবার আমরা ফ্যাসাড ডিজাইন প্যাটার্ন নিয়ে আলোচনা করেছিলাম, আজকে তারই ধারাবাহিকতায় আলোচনা করব ফ্যাক্টরি নামের এই ডিজাইন প্যাটার্ন নিয়ে। ফ্যাক্টরি বা কারখানায় কি হয় বলেন তো? কোন একটা বা একাধিক রকমের জিনিসপত্র তৈরী করা হয়। আপনি যদি কখনো সাবানের কারখানায় যান তাহলে আপনি কি চাইবেন? “সাবান” চাইবেন, তাই না? – কারখানায় আপনাকে তৈরী করা সাবান দিয়ে দিবে যা আপনি তখনই ব্যবহার করতে পারবেন। এখন যদি সাবানের কারখানা বা ফ্যাক্টরি না থাকত তাহলে আপনাকে কত কষ্ট করে বাসায় বসে বসে চর্বি জ্বাল দিয়ে তারপর গ্লিসারিন মিশিয়ে সাবান বানাতে হত। কিন্তু সেটা কষ্টকর বলে আমরা তা কখনোই করি না। আমরা কারখানায় থেকে সরাসরি ব্যবহারযোগ্য তৈরী পন্য পেয়ে যাই – আমাদেরকে জানতে বা বুঝতে হয় না যে পন্য/অবজেক্ট টি কিভাবে বা কি প্রক্রিয়ায় তৈরী হল।
ঠিক একইভাবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে যখন কোন একটি অবজেক্টের মেথড কল করে আরেকটি অবজেক্ট পাওয়া যায়, সেটাকে বলে ফ্যাক্টরি অবজেক্ট আর এই ঘটনাকেই বলে ফ্যাক্টরি প্যাটার্ন। আপনারা ডেটাবেজ নিয়ে কাজ করতে গেলে (বিশেষ করে ওআরএম এর ক্ষেত্রে) অনেক সময় নিচের মত করে কল করেন, আর না করলেও ধরে নেন যে কল করেন – কারন এরকম মেথড আপনারা প্রায় সবসময় ব্যবহার করছেন
[sourcecode language=”php”]
$db = new DbManager();
$userTable = $db->getTable("users");
//now $userTable object can interact with ‘users’ table in the db, like $userTable->insert()
[/sourcecode]
এখানে DbManager একটা ফ্যাক্টরি ক্লাস যেটা তার getTable() ফ্যাক্টরি মেথডের সাহায্যে একটা টেবিল অবজেক্ট তৈরী করে রিটার্ন করছে যার মাধ্যমে আপনি ডেটাবেজের টেবিল গুলোর সাথে কাজ করতে পারছেন, কিন্তু আপনাকে জানতে হচ্ছে না যে এই টেবিল অবজেক্ট টা কিভাবে তৈরী হয়েছে । খেয়াল করলে দেখবেন আপনার প্রজেক্টে এরকম অসংখ্য মেথড কল করা আছে যেখানে একটা অবজেক্ট এর মেথড কল করে আরেকটা নতুন অবজেক্ট পাওয়া যায়। এই পুরো ঘটনাটাকেই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে বলে ফ্যাক্টরি ডিজাইন প্যাটার্ন 🙂
ডিজাইন প্যাটার্ন খুব কঠিন কিছু নয়, জাস্ট বুঝতে হয় আর জানতে হয়। এমনকি আমরা না জেনেই অনেক ডিজাইন প্যাটার্ন আমাদের কোডে ব্যবহার করি প্রতিনিয়ত। আশাকরি আপনাদের ভালো লেগেছে এই আর্টিকেলটি। আমি আমার মত করে বোঝানোর চেষ্টা করেছি, আমার জানায় ভুল থাকতে পারে – সেক্ষেত্রে আমাকে জানালে খুশি হব। আপনার জন্য শুভকামনা রইল।