Template Method Pattern একটি behavioral design pattern যা একটি অবজেক্টের কাজ করার মূল কাঠামোকে নির্দিষ্ট করে, কিন্তু কিছু ধাপের বাস্তবায়ন subclasses-এ delegating করে। এই প্যাটার্নটি মূলত একাধিক ধাপের সমন্বয়ে গঠিত একটি প্রক্রিয়া বা অ্যালগরিদমে ব্যবহৃত হয়, যেখানে নির্দিষ্ট কিছু অংশ সবার জন্য একরকম হয় এবং কিছু অংশ subclasses দ্বারা কাস্টমাইজড বা পরিবর্তিত হতে পারে।
Template Method Pattern এমন একটি প্যাটার্ন যেখানে সুপারক্লাসে একটি "template" মেথড থাকে, যা পুরো অ্যালগরিদম বা প্রক্রিয়ার কাঠামো নির্ধারণ করে, এবং সেগুলির কিছু অংশ সাবক্লাসে ডিফাইন করা হয়।
Template Method Pattern এর ধারণা
এই প্যাটার্নে, আমরা একটি abstract class তৈরি করি যা একটি মেথড নির্ধারণ করে, যা কিছু অবজেক্টের কাজে প্রধান কাঠামো হিসাবে কাজ করবে। এই মেথডের মধ্যে কিছু ধাপ abstract থাকে, যার বাস্তবায়ন subclasses-এ দেওয়া হয়। ফলে, subclasses তাদের নিজস্ব প্রয়োজন অনুযায়ী সেই ধাপগুলোর বাস্তবায়ন করতে পারে।
Template Method Pattern এর উপকারিতা
- Code Reusability: Template Method Pattern সাধারণত কোড পুনরায় ব্যবহারযোগ্যতা নিশ্চিত করে, কারণ মূল অ্যালগরিদমের কাঠামো সুপারক্লাসে থাকে এবং কেবলমাত্র কিছু অংশ subclasses দ্বারা পরিবর্তিত হয়।
- Flexibility: আপনি অ্যালগরিদমের মূল কাঠামো পরিবর্তন না করে বিভিন্ন ধাপের বাস্তবায়ন কাস্টমাইজ করতে পারেন।
- Control Over Execution: এই প্যাটার্নের মাধ্যমে মূল অ্যালগরিদমের বিভিন্ন অংশের কার্যক্রম নিয়ন্ত্রণ করা সম্ভব হয়, যার ফলে টেমপ্লেটের মধ্যে থাকা ধাপগুলো অবিকৃত রাখা যায়।
Template Method Pattern এর কাঠামো (Structure)
Template Method Pattern সাধারণত নিচের উপাদানগুলো নিয়ে কাজ করে:
- Abstract Class: এটি মূল অ্যালগরিদমের কাঠামো তৈরি করে এবং কিছু অবজেক্টের কার্যকলাপের জন্য "template method" নির্ধারণ করে।
- Concrete Class: এটি Abstract class থেকে ইনহেরিট করে, এবং যেখানে প্রয়োজন, সেখানে ঐ নির্দিষ্ট ধাপগুলোর বাস্তবায়ন করা হয়।
- Template Method: এটি সেই মেথড যা পুরো অ্যালগরিদমের কাঠামো তৈরি করে, কিন্তু কিছু অংশের বাস্তবায়ন subclasses এর উপর নির্ভর করে।
Template Method Pattern এর উদাহরণ
ধরা যাক, আমাদের একটি রান্নার প্রক্রিয়া (Cooking Process) আছে। রান্না করার একটি নির্দিষ্ট কাঠামো রয়েছে, যেমন প্রথমে উপকরণ প্রস্তুত করা, তারপর রান্না করা, এবং শেষে প্লেটিং করা। কিন্তু বিভিন্ন রান্নার জন্য কিছু ধাপ পরিবর্তিত হতে পারে (যেমন, তাপমাত্রা বা রান্নার সময়)। এই কারণে, আমরা Template Method Pattern ব্যবহার করতে পারি।
1. Abstract Class (CookingProcess)
abstract class CookingProcess {
// Template method
public final void cook() {
prepareIngredients();
cookDish();
plateDish();
serve();
}
// Steps to be implemented by subclasses
protected abstract void prepareIngredients();
protected abstract void cookDish();
protected abstract void plateDish();
// Common step for all
private void serve() {
System.out.println("Dish is ready to be served!");
}
}
2. Concrete Classes (VegetarianCooking, NonVegetarianCooking)
class VegetarianCooking extends CookingProcess {
@Override
protected void prepareIngredients() {
System.out.println("Preparing vegetables and spices...");
}
@Override
protected void cookDish() {
System.out.println("Cooking vegetarian dish...");
}
@Override
protected void plateDish() {
System.out.println("Plating the vegetarian dish...");
}
}
class NonVegetarianCooking extends CookingProcess {
@Override
protected void prepareIngredients() {
System.out.println("Preparing meat and spices...");
}
@Override
protected void cookDish() {
System.out.println("Cooking non-vegetarian dish...");
}
@Override
protected void plateDish() {
System.out.println("Plating the non-vegetarian dish...");
}
}
3. Client Code (Main)
public class TemplateMethodPatternExample {
public static void main(String[] args) {
CookingProcess vegetarianDish = new VegetarianCooking();
vegetarianDish.cook(); // Follow the template method to cook vegetarian dish
System.out.println("\n");
CookingProcess nonVegetarianDish = new NonVegetarianCooking();
nonVegetarianDish.cook(); // Follow the template method to cook non-vegetarian dish
}
}
Explanation:
- Abstract Class:
CookingProcessক্লাসটি মূল অ্যালগরিদমের কাঠামো নির্ধারণ করে (মেথডcook()), কিন্তু কিছু ধাপগুলি (যেমনprepareIngredients(),cookDish(), এবংplateDish())abstractমেথড হিসাবে ডিফাইন করা হয়, যা subclasses দ্বারা বাস্তবায়িত হবে। - Concrete Classes:
VegetarianCookingএবংNonVegetarianCookingক্লাসগুলিCookingProcessথেকে ইনহেরিট করে এবং তাদের নিজস্বভাবে বিশেষ ধাপগুলির বাস্তবায়ন করে (যেমন, উপকরণ প্রস্তুত করা, রান্না করা, প্লেটিং করা)। - Template Method:
cook()মেথডটি Template Method, যা মূল অ্যালগরিদমের কাঠামো তৈরি করে এবং ধাপগুলির জন্য সাবক্লাসে নির্দিষ্ট বাস্তবায়নকে কল করে।
Template Method Pattern এর সুবিধা
- Code Reusability: Template Method Pattern কোড পুনঃব্যবহারের সুবিধা দেয়, কারণ মূল কাঠামো একটি জায়গায় সংরক্ষিত থাকে এবং কেবলমাত্র কিছু অংশ পরিবর্তিত হয়।
- Control Flow: এটি কাজের মূল কন্ট্রোল প্রদান করে, কারণ আপনি শুধুমাত্র কিছু ধাপ কাস্টমাইজ করতে পারেন, তবে পুরো প্রক্রিয়া সুপারক্লাসে পরিচালিত হয়।
- Flexibility: এটি সিস্টেমের মধ্যে নতুন কাস্টম ধাপ বা আচরণ যুক্ত করার জন্য নমনীয়তা প্রদান করে।
Template Method Pattern এর সময় এবং স্থান জটিলতা
- Time Complexity: O(1), কারণ Template Method Pattern নির্দিষ্ট ধাপের তালিকা তৈরি করে, এবং এই ধাপগুলির মধ্যে কোনো পুনরাবৃত্তি বা অতিরিক্ত কার্যকলাপ নেই।
- Space Complexity: O(1), কারণ এটি কোনো অতিরিক্ত ডাটা স্ট্রাকচার বা মেমরি ব্যবহার করে না, শুধুমাত্র কার্যকলাপের ধাপগুলির জন্য রেফারেন্স রাখা হয়।
Template Method Pattern একটি শক্তিশালী behavioral design pattern যা অ্যাবস্ট্রাক্ট ক্লাসে একটি "template" মেথড নির্ধারণ করে এবং সেই মেথডের মধ্যে কিছু অংশ কাস্টমাইজড সাবক্লাসগুলির মাধ্যমে পূর্ণ করা হয়। এটি কোডের পুনঃব্যবহারযোগ্যতা, ফ্লেক্সিবিলিটি এবং কার্যকরী নিয়ন্ত্রণ প্রদান করে। এই প্যাটার্নটি workflow বা algorithmic process গুলিতে যেখানে কিছু স্টেপ স্থির থাকে এবং কিছু স্টেপ কাস্টমাইজ করা প্রয়োজন, সেখানে অত্যন্ত কার্যকরী।
Read more