Factory Pattern একটি ডিজাইন প্যাটার্ন যা object creation এর প্রক্রিয়াকে কনট্রোল করে এবং ক্লাসের উদাহরণ তৈরি করতে একটি একক পদ্ধতি প্রদান করে। সাধারণত, Factory Pattern ইম্প্লিমেন্টেশন সাধারণভাবে একটি মেথড ব্যবহার করে যা অবজেক্ট তৈরি করে এবং ফিরিয়ে দেয়।
এটি সাধারণত object creation logic থেকে ক্লাসের ব্যবহারকারীকে আলাদা করার জন্য ব্যবহৃত হয়। Functional Programming এ, আমরা ফ্যাক্টরি প্যাটার্নকে Function বা Supplier ইন্টারফেস ব্যবহার করে কার্যকরভাবে বাস্তবায়িত করতে পারি।
Functional Factory Pattern:
ফ্যাক্টরি প্যাটার্ন সাধারণত একটি ক্লাসের ইন্সট্যান্স তৈরি করার জন্য ব্যবহৃত হয়। Functional Programming এর মাধ্যমে, আপনি Factory Function তৈরি করতে পারেন যা একটি Function বা Supplier ব্যবহার করে একটি নতুন অবজেক্ট তৈরি করবে এবং ফিরিয়ে দেবে।
Functional Interface এর মাধ্যমে Factory Pattern বাস্তবায়ন
Java 8 থেকে Functional Interfaces এবং Lambda Expressions ব্যবহৃত হওয়া শুরু করেছে। এগুলি আমাদের ক্লাস বা অবজেক্ট তৈরি করতে ফাংশনাল পদ্ধতিতে ফ্যাক্টরি প্যাটার্ন বাস্তবায়িত করতে সাহায্য করে।
এখানে আমরা একটি Product ইন্টারফেস তৈরি করবো এবং একটি ফ্যাক্টরি ফাংশন ব্যবহার করে এই অবজেক্ট তৈরি করবো।
Step 1: Product ইন্টারফেস তৈরি করা
প্রথমে, একটি সাধারণ Product ইন্টারফেস তৈরি করি যা কিছু প্রোপার্টি রাখবে।
public interface Product {
void display();
}
Step 2: Product এর দুটি বাস্তবায়ন তৈরি করা
এখন, আমরা দুটি কনক্রিট ক্লাস তৈরি করবো যা Product ইন্টারফেসটি ইমপ্লিমেন্ট করবে।
public class ConcreteProductA implements Product {
@Override
public void display() {
System.out.println("Product A");
}
}
public class ConcreteProductB implements Product {
@Override
public void display() {
System.out.println("Product B");
}
}
Step 3: Functional Factory Function তৈরি করা
এখন, আমরা Functional Interface ব্যবহার করে Factory Pattern এর কার্যকরী ফাংশন তৈরি করবো। এখানে Function<T, R> বা Supplier ব্যবহার করে একটি Factory Function তৈরি করা যাবে।
import java.util.function.Supplier;
public class FunctionalFactory {
// Factory method using Supplier
public static Supplier<Product> getProduct(String type) {
if ("A".equalsIgnoreCase(type)) {
return ConcreteProductA::new;
} else if ("B".equalsIgnoreCase(type)) {
return ConcreteProductB::new;
}
throw new IllegalArgumentException("Unknown product type");
}
public static void main(String[] args) {
// Using the factory function to create Product A
Product productA = getProduct("A").get();
productA.display(); // Output: Product A
// Using the factory function to create Product B
Product productB = getProduct("B").get();
productB.display(); // Output: Product B
}
}
এখানে:
- getProduct ফাংশনটি একটি Supplier রিটার্ন করে, যেটি একটি নতুন প্রোডাক্ট তৈরি করে।
- আমরা
ConcreteProductA::newএবংConcreteProductB::newব্যবহার করে যথাক্রমে Product A এবং Product B তৈরি করছি। get()মেথড ব্যবহার করে প্রোডাক্টের ইন্সট্যান্স তৈরি করা হচ্ছে এবং তার পরdisplay()মেথডটি কল করা হচ্ছে।
Step 4: ফ্যাক্টরি প্যাটার্নের কার্যকারিতা
এটি Functional Programming ধারণা ব্যবহার করে Factory Pattern এর একটি কার্যকরী বাস্তবায়ন। এখানে, কোডটি declarative এবং immutable এবং lambda expression এবং Supplier ব্যবহৃত হয়েছে। এর ফলে কোড আরও পরিষ্কার এবং পুনঃব্যবহারযোগ্য হয়েছে।
Functional Factory Pattern এর সুবিধা:
- Flexible Object Creation: ফ্যাক্টরি প্যাটার্ন ব্যবহার করে আপনি অবজেক্ট তৈরি করার লজিককে এক জায়গায় রাখেন, যা কোডকে আরও পরিষ্কার এবং মডুলার করে তোলে।
- Immutability: Functional interfaces এবং Supplier ব্যবহার করার ফলে কোডের অখণ্ডতা বজায় থাকে।
- Higher-Order Functions: ফ্যাক্টরি ফাংশনকে higher-order functions হিসেবে ব্যবহার করা সম্ভব, অর্থাৎ আপনি একটি ফাংশনকে অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে ব্যবহার করতে পারেন অথবা রিটার্ন করতে পারেন।
- Separation of Concerns: অবজেক্ট তৈরি করার লজিক এবং তার ব্যবহার পৃথক করা যায়, যা কোডের রক্ষণাবেক্ষণ সহজ করে।
সারাংশ:
- Functional Factory Pattern Java তে Functional Programming এর ধারণা ব্যবহার করে ফ্যাক্টরি প্যাটার্ন বাস্তবায়ন করতে সাহায্য করে।
- Supplier বা Function ইন্টারফেস ব্যবহার করে আপনি ফ্যাক্টরি ফাংশন তৈরি করতে পারেন, যা অবজেক্ট তৈরি করে এবং রিটার্ন করে।
- এই পদ্ধতিতে কোড অনেক বেশি declarative, modular, এবং immutable হয়, যা কোডের পরিষ্কারতা ও রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করে।
Read more