Category: design pattern

সহজ বাংলায় ডিজাইন প্যাটার্ন – সিংগেলটন (Singleton)

singleton

এই সিরিজে এর আগে আমরা আলোচনা করেছি ফ্যাসাড এবং ফ্যাক্টরি প্যাটার্ন নিয়ে, আর আজ আলোচনা করব সিংগেলটন প্যাটার্ন নিয়ে।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে বহুল ব্যবহৃত (এবং বহুল সমালোচিত) ডিজাইন প্যাটার্নগুলোর মাঝে একটি হল সিংগেলটন প্যাটার্ন। এই প্যাটার্নের লক্ষ্য হল কোন একটি অবজেক্ট বার বার নতুন ভাবে তৈরী না করে একবার তৈরী করে সেই ইন্সট্যান্সকেই বার বার ব্যবহার করা। যদিও এই প্যাটার্নের উদ্দেশ্য রিসোর্সের সাশ্রয় করা, এবং অবজেক্ট কে রিইউজ করা কিন্তু একই সাথে এটা কিছু জটিলতাও নিয়ে আসে। যাই হোক – সেগুলো নিয়ে আমরা পরে দেখব, আপাতত দেখি সিংগেলটন প্যাটার্ন আসলে কি এবং কিভাবে এটা ব্যবহৃত হয়।

আমরা একটা বাস্তব উদাহরন দিয়ে শুরু করি। মনে করেন যে টেবিলে আপনারা চারজন (আপনি, আপনার বোন, আপনার বাবা এবং মা) খাবার খেতে বসেছেন, পাশে বাবুর্চি দাঁড়িয়ে আপনাদের এটা ওটা এগিয়ে দিচ্ছে। এখন আপনি একটি থালা চাইলেন, বাবুর্চি আপনাকে একটা পরিষ্কার থালা এগিয়ে দিল। একই ভাবে আপনার বাবা, মা এবং বোন থালা চাইলে বাবুর্চি তাদেরকেও যার যার থালা দিয়ে দিবে। এখানে খেয়াল করবেন যে বাবুর্চি কিন্তু আপনার থালা নিয়ে আপনার বোনকে দিচ্ছে না। সবাই যে যার থালা পেয়েছে। এখন আপনি ভাতের গামলা চাইলেন – বাবুর্চি আপনাকে টেবিলে রাখা একমাত্র ভাতের গামলাটি এগিয়ে দিবে। আপনার বোনও যদি এখন ভাতের গামলা চায় তাহলে বাবুর্চি কিন্তু তাঁকে নতুন একটা ভাতের গামলা না দিয়ে সেই একই গামলা তাঁর দিকে এগিয়ে দিবে। তাহলে বিষয়টা কি হল? একই ভাতের গামলা বার বার রিইউজ হচ্ছে, সবাইকে যার যার থালার মত নতুন নতুন ভাতের গামলা দেয়া হচ্ছে না – এই পুরো ঘটনাটাই অনেকটা সিংগেলটন প্যাটার্ন এর মত, যখন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে প্রয়োগ করবেন।

প্রোগ্রামিংয়ের সময় সিংগেলটন প্যাটার্ন অনেকভাবে অ্যাপ্লাই করা যায়, যেমন নিচের কোডে একটি কমন কনটেইনার অবজেক্ট সবাইকে আরেকটি অবজেক্ট সিংগেলটন প্যাটার্নের মাধ্যমে রিটার্ন করছে, বার বার নতুন অবজেক্ট তৈরী না করে। আপনারা এই কোড টি দেখতে পারেন, পিএইচপি তে লেখা https://gist.github.com/hasinhayder/7487898b7d38aefe3179 ।

https://gist.github.com/hasinhayder/7487898b7d38aefe3179

এই কোডে RentACar একটি কনটেইনার অবজেক্ট যে কিনা দুইজন প্যাসেঞ্জার কে একই কার দিচ্ছে (ধরে নেন যে একজন প্যাসেঞ্জার কে নামিয়ে দিয়ে আরেকজন প্যাসেঞ্জার কে একই কার পাঠিয়ে দিয়েছে, হে হে)। কোড রান করালে দেখবেন দুজন প্যাসেঞ্জারই যে গাড়িটি ব্যবহার করেছে তার নাম্বার প্লেট একই 🙂 আমি খুব সহজে বোঝানোর জন্য স্ট্যাটিক অবজেক্ট দিয়ে উদাহরন টি করে দেখালাম আর কি

সিংগেলটন প্যাটার্নের সুবিধা যেমন আছে, তেমন অসুবিধাও আছে বেশ কিছু। তবে সেগুলো নিয়ে আমরা পরে আলোচনা করব একদিন 🙂 আশাকরি আপনারা বুঝতে পেরেছেন সিংগেলটন প্যাটার্ন কি জিনিস এবং এটা কিভাবে ব্যবহার করা হয়। আমি আমার মত করে বোঝানোর চেষ্টা করেছি, আমার জানায় ভুল থাকতে পারে – সেক্ষেত্রে জানালে খুশি হব। আর এই সিরিজটি আপনাদের কাজে লাগলেই আমার ভালো লাগবে 🙂 আপনার প্রোগ্রামিংয়ে শুভকামনা থাকল।

সহজ বাংলায় ডিজাইন প্যাটার্ন – ফ্যাক্টরি (Factory)

steering2

এর আগেরবার আমরা ফ্যাসাড ডিজাইন প্যাটার্ন নিয়ে আলোচনা করেছিলাম, আজকে তারই ধারাবাহিকতায় আলোচনা করব ফ্যাক্টরি নামের এই ডিজাইন প্যাটার্ন নিয়ে। ফ্যাক্টরি বা কারখানায় কি হয় বলেন তো? কোন একটা বা একাধিক রকমের জিনিসপত্র তৈরী করা হয়। আপনি যদি কখনো সাবানের কারখানায় যান তাহলে আপনি কি চাইবেন? “সাবান” চাইবেন, তাই না? – কারখানায় আপনাকে তৈরী করা সাবান দিয়ে দিবে যা আপনি তখনই ব্যবহার করতে পারবেন। এখন যদি সাবানের কারখানা বা ফ্যাক্টরি না থাকত তাহলে আপনাকে কত কষ্ট করে বাসায় বসে বসে চর্বি জ্বাল দিয়ে তারপর গ্লিসারিন মিশিয়ে সাবান বানাতে হত। কিন্তু সেটা কষ্টকর বলে আমরা তা কখনোই করি না। আমরা কারখানায় থেকে সরাসরি ব্যবহারযোগ্য তৈরী পন্য পেয়ে যাই – আমাদেরকে জানতে বা বুঝতে হয় না যে পন্য/অবজেক্ট টি কিভাবে বা কি প্রক্রিয়ায় তৈরী হল।

ঠিক একইভাবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে যখন কোন একটি অবজেক্টের মেথড কল করে আরেকটি অবজেক্ট পাওয়া যায়, সেটাকে বলে ফ্যাক্টরি অবজেক্ট আর এই ঘটনাকেই বলে ফ্যাক্টরি প্যাটার্ন। আপনারা ডেটাবেজ নিয়ে কাজ করতে গেলে (বিশেষ করে ওআরএম এর ক্ষেত্রে) অনেক সময় নিচের মত করে কল করেন, আর না করলেও ধরে নেন যে কল করেন – কারন এরকম মেথড আপনারা প্রায় সবসময় ব্যবহার করছেন

[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() ফ্যাক্টরি মেথডের সাহায্যে একটা টেবিল অবজেক্ট তৈরী করে রিটার্ন করছে যার মাধ্যমে আপনি ডেটাবেজের টেবিল গুলোর সাথে কাজ করতে পারছেন, কিন্তু আপনাকে জানতে হচ্ছে না যে এই টেবিল অবজেক্ট টা কিভাবে তৈরী হয়েছে । খেয়াল করলে দেখবেন আপনার প্রজেক্টে এরকম অসংখ্য মেথড কল করা আছে যেখানে একটা অবজেক্ট এর মেথড কল করে আরেকটা নতুন অবজেক্ট পাওয়া যায়। এই পুরো ঘটনাটাকেই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে বলে ফ্যাক্টরি ডিজাইন প্যাটার্ন 🙂

ডিজাইন প্যাটার্ন খুব কঠিন কিছু নয়, জাস্ট বুঝতে হয় আর জানতে হয়। এমনকি আমরা না জেনেই অনেক ডিজাইন প্যাটার্ন আমাদের কোডে ব্যবহার করি প্রতিনিয়ত। আশাকরি আপনাদের ভালো লেগেছে এই আর্টিকেলটি। আমি আমার মত করে বোঝানোর চেষ্টা করেছি, আমার জানায় ভুল থাকতে পারে – সেক্ষেত্রে আমাকে জানালে খুশি হব। আপনার জন্য শুভকামনা রইল।

সহজ বাংলায় ডিজাইন প্যাটার্ন: ফ্যাসাড (Facade)

ডিজাইন প্যাটার্ন শুনলেই অনেকেই ঘেমে ওঠেন আর মনে পড়ে যায় গ্যাং-অব-ফোরের দাঁত কিড়মিড় করা ডিজাইন প্যাটার্ন বইটার কথা। তবে মজার বিষয় হল যে আমরা আমাদের নিত্যদিনের প্রোগ্রামিংয়ে অনেকসময়ই জেনে বা না জেনে এসব প্যাটার্ন ব্যবহার করে থাকি, কিন্তু টেকনিক্যাল নাম শুনলে অনেকেই বলতে পারি না যে জিনিসটা আসলে কি। এখন থেকে আমি চেষ্টা করব একদম সহজে কিছু বহুল প্রচলিত ডিজাইন প্যাটার্ন বুঝিয়ে দিতে, আর তারই প্রচেষ্টা হিসেবে আজকের বিষয় হল Facade বা “ফ্যাসাড”

একটু কঠিন বাংলায় ফ্যাসাড হল কোন অবজেক্ট (বা অবজেক্টসমূহ) আরও সহজে ব্যাবহার করার জন্য কুইকলি কোন ফাংশন বা আরেকটা অবজেক্ট লেখা, যার ফলে ব্যবহারকারী কষ্ট না করে অনেক সহজে সেই অবজেক্ট (বা অবজেক্টসমূহ) ব্যবহার করতে পারবেন।

এবার চলুন সহজ বাংলায় বুঝি ফ্যাসাড কি (more…)