Topics :
PHP ও সফটওয়্যার ইঞ্জিনিয়ারিংয়ে ব্যবহৃত সব ডিজাইন প্যাটার্নের তালিকা
এই প্যাটার্নগুলো অবজেক্ট তৈরি ও ম্যানেজ করার প্রক্রিয়াকে আরও সহজ ও নিয়ন্ত্রিত করে।
➡ একটি ক্লাসের শুধুমাত্র একটি ইনস্ট্যান্স তৈরি হয় এবং সেটি গ্লোবালি ব্যবহার করা যায়।
ব্যবহার: ডাটাবেস কানেকশন, লগার, কনফিগারেশন সেটিংস।
➡ একটি ফ্যাক্টরি ক্লাস ব্যবহার করে নির্দিষ্ট প্রকারের অবজেক্ট তৈরি করা হয়।
ব্যবহার: যখন একাধিক অবজেক্টের ধরন রয়েছে এবং কোনটি তৈরি করতে হবে তা নির্ধারণ করতে হবে।
➡ একটি ফ্যাক্টরি যা বিভিন্ন ফ্যাক্টরি ক্লাস তৈরি করে, যারা নির্দিষ্ট ধরনের অবজেক্ট তৈরি করতে পারে।
ব্যবহার: যখন বিভিন্ন অবজেক্ট ফ্যামিলি তৈরি করতে হয়।
➡ অবজেক্ট তৈরি করার স্টেপ-বাই-স্টেপ প্রক্রিয়া আলাদা করে দেওয়া হয়।
ব্যবহার: জটিল অবজেক্ট তৈরি করা যেমন PDF ডকুমেন্ট, HTML রিপোর্ট।
➡ একটি অবজেক্ট ক্লোন করে নতুন অবজেক্ট তৈরি করা হয়।
ব্যবহার: যখন অবজেক্ট তৈরি করা ব্যয়বহুল হয়, এবং ক্লোন করা সহজ হয়।
এই প্যাটার্নগুলো অবজেক্টের গঠন এবং একে অপরের সাথে সম্পর্ক কিভাবে কাজ করবে তা নির্ধারণ করে।
➡ এক ইন্টারফেসকে অন্য ইন্টারফেসে রূপান্তর করে যাতে দুইটি ভিন্ন সিস্টেম একসাথে কাজ করতে পারে।
ব্যবহার: পুরাতন কোড নতুন সিস্টেমের সাথে সংযুক্ত করতে।
➡ দুটি ভিন্ন সিস্টেমের মধ্যে সেতু তৈরি করে, যাতে তারা স্বাধীনভাবে কাজ করতে পারে।
ব্যবহার: ভিন্ন প্ল্যাটফর্মে কোড চালানো যেমন Windows এবং Linux।
➡ একটি ট্রি স্ট্রাকচার তৈরি করা হয় যেখানে অবজেক্ট ও সাব-অবজেক্ট একইভাবে ব্যবহার করা যায়।
ব্যবহার: UI কম্পোনেন্ট (বাটন, মেনু, সাবমেনু)।
➡ নতুন ফিচার যোগ করার জন্য মূল অবজেক্ট পরিবর্তন না করে ডেকোরেটর ক্লাস ব্যবহার করা হয়।
ব্যবহার: কফি শপে বিভিন্ন টপিং যোগ করা (দুধ, চিনি, চকলেট)।
➡ একটি সাধারণ ইন্টারফেস তৈরি করা হয় যাতে ব্যাকএন্ডের জটিল লজিক ব্যবহার করা সহজ হয়।
ব্যবহার: ইমেল পাঠানোর জন্য PHPMailer লাইব্রেরি।
➡ অবজেক্ট রিইউজ করা হয়, যাতে মেমোরি ব্যবহার কম হয়।
ব্যবহার: গেম ডেভেলপমেন্ট (একই টাইপের শত্রু চরিত্র)।
➡ প্রক্সি অবজেক্ট ব্যবহার করে মূল অবজেক্টে অ্যাক্সেস নিয়ন্ত্রণ করা হয়।
ব্যবহার: ক্যাশিং, এক্সেস কন্ট্রোল, লোড-ব্যালেন্সিং।
এই প্যাটার্নগুলো অবজেক্টগুলোর মধ্যে যোগাযোগ ও আচরণ নিয়ন্ত্রণ করে।
➡ একাধিক অবজেক্টের মধ্যে রিকোয়েস্ট ফরোয়ার্ড করা হয় যতক্ষণ না উপযুক্ত হ্যান্ডলার পায়।
ব্যবহার: লজিক্যাল চেইন যেমন লগিং, অথরাইজেশন।
➡ একটি অপারেশনকে অবজেক্ট হিসেবে সংরক্ষণ করা হয় যাতে এটি প্রয়োজনে আবার চালানো যায়।
ব্যবহার: Undo/Redo ফিচার।
➡ একটি ব্যবহারকারীর ইনপুটকে পার্স করে তার মান বের করা হয়।
ব্যবহার: কাস্টম ক্যালকুলেটর, SQL কুয়েরি পার্সার।
➡ একটি কালেকশনকে লুপ করে ঘুরিয়ে ডাটা রিটার্ন করা হয়।
ব্যবহার: PHP-এর Iterator Interface।
➡ একটি মধ্যস্থতাকারী (Mediator) ব্যবহার করে অবজেক্টগুলোর মধ্যে সরাসরি যোগাযোগ কমানো হয়।
ব্যবহার: চ্যাট রুম যেখানে ব্যবহারকারীরা চ্যাট করতে পারে।
➡ অবজেক্টের পূর্বের অবস্থা সংরক্ষণ করা হয়, যাতে প্রয়োজনে পুরনো অবস্থায় ফিরে যাওয়া যায়।
ব্যবহার: Undo/Redo ফিচার।
➡ এক অবজেক্ট আপডেট হলে অন্যান্য অবজেক্টগুলিও স্বয়ংক্রিয়ভাবে আপডেট হয়।
ব্যবহার: ব্লগ সাবস্ক্রিপশন, ইভেন্ট লিসেনার।
➡ অবজেক্টের স্টেট পরিবর্তনের উপর ভিত্তি করে তার আচরণ পরিবর্তন হয়।
ব্যবহার: ফাইল ডাউনলোডের বিভিন্ন স্টেট (Downloading, Completed, Failed)।
➡ একই কাজ করার বিভিন্ন কৌশল আলাদা ক্লাস দিয়ে ইমপ্লিমেন্ট করা হয়।
ব্যবহার: পেমেন্ট মেথড (PayPal, Credit Card)।
➡ একটি টেমপ্লেট ক্লাসে মূল স্ট্রাকচার তৈরি করা হয় এবং সাব-ক্লাসে কিছু অংশ কাস্টমাইজ করা হয়।
ব্যবহার: ওয়েবসাইটের থিম টেমপ্লেট।
➡ নতুন ফিচার যোগ করা হয়, কিন্তু মূল ক্লাস পরিবর্তন করা হয় না।
ব্যবহার: XML/JSON ডাটা প্রসেসিং।
➡ মডেল (ডাটা), ভিউ (UI), কন্ট্রোলার (লজিক) আলাদা রাখা হয়।
ব্যবহার: Laravel, CodeIgniter।
➡ ডাটাবেজ কোয়েরি ও বিজনেস লজিক আলাদা করা হয়।
ব্যবহার: Laravel Repository Design।
এই ডিজাইন প্যাটার্নগুলো বড় স্কেল সফটওয়্যার আর্কিটেকচার ডিজাইন করতে ব্যবহৃত হয়।
➡ এটি সফটওয়্যার আর্কিটেকচারের সবচেয়ে জনপ্রিয় প্যাটার্ন যেখানে Model (ডাটা), View (UI), এবং Controller (লজিক) আলাদা রাখা হয়।
ব্যবহার: Laravel, CodeIgniter, Symfony ইত্যাদি।
➡ এটি MVC-এর একটি সংস্করণ যেখানে ViewModel আলাদা করা হয়।
ব্যবহার: ফ্রন্টএন্ড লাইব্রেরি যেমন Vue.js, AngularJS।
➡ একটি বড় অ্যাপকে ছোট ছোট সার্ভিসে ভাগ করে আলাদাভাবে ডিপ্লয় ও মেইনটেইন করা হয়।
ব্যবহার: Cloud-based সফটওয়্যার, AWS Lambda, Kubernetes।
➡ সফটওয়্যারকে বিভিন্ন লেয়ারে ভাগ করা হয়, যেমন Presentation Layer, Business Logic Layer, Data Access Layer।
ব্যবহার: এন্টারপ্রাইজ সফটওয়্যার, Spring Framework, Laravel।
➡ ডাটাবেস এক্সেস লজিক ও বিজনেস লজিক আলাদা রাখা হয়।
ব্যবহার: Laravel Repository Pattern, Domain-Driven Design (DDD)।
এই ডিজাইন প্যাটার্নগুলো একই সাথে একাধিক কাজ করার জন্য ব্যবহৃত হয়।
➡ একটি নির্দিষ্ট সংখ্যক থ্রেড তৈরি করা হয়, এবং সেগুলো বারবার ব্যবহার করা হয়, নতুন থ্রেড না বানিয়ে।
ব্যবহার: ব্যাকগ্রাউন্ড প্রসেসিং, বড় সার্ভার অ্যাপ।
➡ একই রিসোর্স একাধিক থ্রেড যাতে একসাথে ব্যবহার না করতে পারে তা নিয়ন্ত্রণ করা হয়।
ব্যবহার: ব্যাংকিং সফটওয়্যার যেখানে ব্যালেন্স একসাথে দুইজন পরিবর্তন করতে পারবে না।
➡ অবজেক্ট নিজে নিজে কাজ করতে পারে এবং অন্য অবজেক্টকে ব্লক না করেই ব্যাকগ্রাউন্ডে প্রসেস চালাতে পারে।
ব্যবহার: ভিডিও গেমস, মাল্টিথ্রেডিং অ্যাপ।