Apache Commons Collections লাইব্রেরির Collection Decorators ক্লাসগুলি Java Collections Framework (JCF)-এর ডেটা স্ট্রাকচারে অতিরিক্ত কার্যকারিতা যোগ করার জন্য ব্যবহৃত হয়। Decorator pattern হল একটি স্ট্রাকচারাল ডিজাইন প্যাটার্ন যা অবজেক্টের উপর নতুন ফাংশনালিটি যোগ করার জন্য ব্যবহৃত হয়, কোন কিছুর মূল স্ট্রাকচার পরিবর্তন না করে। এটি একই সময় existing object এর আচরণ পরিবর্তন বা প্রসারিত করতে সাহায্য করে।
Collection Decorators হল এমন ক্লাস যা collections এর কার্যকারিতা বাড়াতে বা কাস্টমাইজ করতে ব্যবহৃত হয়। একে wrapper objects হিসেবে ভাবা যেতে পারে, যেখানে একটি ইন্টারফেস বা ক্লাসের অভ্যন্তরে অন্য একটি collection অবজেক্টের উপর অতিরিক্ত আচরণ যোগ করা হয়। Decorator pattern এর মাধ্যমে একটি অবজেক্টের কার্যকারিতা পরিবর্তন করার বদলে, তার উপরে নতুন ফিচার যোগ করা হয়।
যেমন, আপনি যদি একটি List বা Map এর উপর কিছু অতিরিক্ত কার্যকলাপ (যেমন সিঙ্ক্রোনাইজেশন, ইমিউটেবিলিটি) চান, তাহলে আপনি একটি Decorator ব্যবহার করতে পারেন যা ওই ফিচারটি সুনিশ্চিত করবে।
Apache Commons Collections লাইব্রেরি Collection Decorators এর মাধ্যমে বিভিন্ন ধরনের অতিরিক্ত কার্যকারিতা যোগ করার সুযোগ দেয়, যেমন Synchronized collections, Unmodifiable collections, Predicated collections ইত্যাদি। নিচে কিছু সাধারণ Collection Decorators এর উদাহরণ দেওয়া হলো:
Unmodifiable collections হল এমন কালেকশন যা immutable (অপরিবর্তনীয়), যেখানে আপনি ডেটা পরিবর্তন করতে পারবেন না। এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি চান যে, কিছু Collection ডেটা নিরাপদভাবে শুধুমাত্র পড়ার জন্য ব্যবহার করা হোক।
Unmodifiable Collection ডেকোরেটরের উদাহরণ:
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.Arrays;
public class UnmodifiableCollectionExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Creating an unmodifiable collection
List<String> unmodifiableList = CollectionUtils.unmodifiableList(list);
System.out.println("Unmodifiable List: " + unmodifiableList);
// Attempting to modify will throw UnsupportedOperationException
// unmodifiableList.add("date"); // This will throw exception
}
}
এখানে:
আউটপুট:
Unmodifiable List: [apple, banana, cherry]
এটি immutable collection তৈরি করে, যেটি কোনো পরিবর্তন গ্রহণ করবে না।
Synchronized Collections হল এমন কালেকশন যেগুলি একাধিক থ্রেডের মধ্যে নিরাপদভাবে ব্যবহৃত হতে পারে। যখন আপনি একাধিক থ্রেডের সাথে কাজ করেন এবং কালেকশনের উপরে একযোগে অপারেশন চালাতে চান, তখন synchronized collections ব্যবহার করা হয়।
Synchronized Collection ডেকোরেটরের উদাহরণ:
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.Arrays;
public class SynchronizedCollectionExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Creating a synchronized collection
List<String> synchronizedList = CollectionUtils.synchronizedList(list);
synchronized(synchronizedList) {
synchronizedList.add("date");
System.out.println(synchronizedList);
}
}
}
এখানে:
আউটপুট:
[apple, banana, cherry, date]
এটি নিশ্চিত করে যে, যখন একাধিক থ্রেড একই কালেকশনের উপরে কাজ করে, তখন ডেটা সুরক্ষিত থাকে।
Predicated collections হল এমন কালেকশন যা একটি নির্দিষ্ট শর্ত বা predicate (যেমন একটি ফিল্টার) এর উপর ভিত্তি করে কার্যকরী হয়। এটি আপনাকে কালেকশনের মধ্যে শুধু নির্দিষ্ট ধরনের উপাদান সংরক্ষণ করতে সাহায্য করে।
Predicated Collection ডেকোরেটরের উদাহরণ:
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class PredicatedCollectionExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Creating a predicated collection that only allows strings with length greater than 5
List<String> predicatedList = CollectionUtils.predicatedList(list, str -> str.length() > 5);
predicatedList.add("grapefruit");
System.out.println(predicatedList); // Output: [grapefruit]
// Trying to add an invalid string
predicatedList.add("pear"); // This will not be added
System.out.println(predicatedList); // Output: [grapefruit]
}
}
এখানে:
আউটপুট:
[grapefruit]
[grapefruit]
এটি কেবলমাত্র নির্দিষ্ট শর্ত পূর্ণকারী উপাদানগুলি কেবলমাত্র List-এ যোগ করতে অনুমতি দেয়।
Collection Decorators হল একটি শক্তিশালী টুল যা Apache Commons Collections লাইব্রেরিতে Java Collections Framework-এর উপরে অতিরিক্ত কার্যকারিতা যোগ করতে ব্যবহৃত হয়। এগুলি Java ডেভেলপারদের জন্য বিভিন্ন ধরনের স্ট্যান্ডার্ড কোলেকশন ডেটা স্ট্রাকচারের উপর functional extensions প্রদান করে, যেমন immutable collections, synchronized collections, এবং predicated collections। Decorator pattern ব্যবহার করে এই কার্যকারিতা যোগ করা হয়, যা মূল ডেটা স্ট্রাকচারের কার্যকারিতা পরিবর্তন না করে নতুন ফিচার সরবরাহ করে।
common.read_more