Observer Pattern এবং Decorator Pattern হলো দুটি Behavioral Design Patterns, যা Salesforce-এর Apex কোডে বিভিন্ন ক্ষেত্রে ব্যবহৃত হয়।
Observer Pattern ব্যবহৃত হয় যখন একটি অবজেক্টের স্টেট পরিবর্তন হলে সেটি সাথে সাথে অন্য অবজেক্টগুলোকেও নোটিফাই করতে হয়। এই প্যাটার্ন সাধারণত Event-Driven সিস্টেমে ব্যবহৃত হয়। Apex-এ, এটি Notifications বা কোনো Event-এর উপর ভিত্তি করে বিভিন্ন শ্রেণীর অবজেক্টকে আপডেট করতে সহায়ক।
ধরুন, আমাদের একটি Order সিস্টেম আছে যেখানে অর্ডার কনফার্ম হলে বিভিন্ন অবজেক্ট, যেমন Email Service, SMS Service, এবং Logging Service, নোটিফাই হবে।
// Observer Interface
public interface Observer {
void update(String message);
}
// Concrete Observers
public class EmailService implements Observer {
public void update(String message) {
System.debug('Sending email: ' + message);
}
}
public class SMSService implements Observer {
public void update(String message) {
System.debug('Sending SMS: ' + message);
}
}
// Subject Class
public class Order {
private List<Observer> observers = new List<Observer>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
public void confirmOrder() {
// Order Confirmation Logic
System.debug('Order confirmed');
notifyObservers('Order has been confirmed!');
}
}
// Usage
public class OrderSystem {
public static void run() {
Order order = new Order();
order.attach(new EmailService());
order.attach(new SMSService());
order.confirmOrder();
}
}
Decorator Pattern ব্যবহার করা হয় একটি অবজেক্টে নতুন নতুন behavior যোগ করতে, তাও inheritance ছাড়া। এটি Apex-এ বিশেষভাবে উপকারী যখন runtime-এ object-এর behavior dynamically পরিবর্তন করতে হয়।
ধরুন, আমাদের একটি Notification সিস্টেম আছে, যেখানে আমরা একটি Basic Notification পাঠাতে চাই। কখনো আমরা SMS, কখনো Email, আবার কখনো SMS এবং Email উভয়ই যুক্ত করতে চাই। Decorator Pattern ব্যবহার করে আমরা এই behavior-গুলো যোগ করতে পারি।
// Notifier Interface
public interface Notifier {
void send();
}
// Basic Notifier
public class BasicNotifier implements Notifier {
public void send() {
System.debug('Sending basic notification');
}
}
// SMS Decorator
public class SMSDecorator extends BasicNotifier {
private Notifier notifier;
public SMSDecorator(Notifier notifier) {
this.notifier = notifier;
}
public void send() {
notifier.send();
System.debug('Sending SMS notification');
}
}
// Email Decorator
public class EmailDecorator extends BasicNotifier {
private Notifier notifier;
public EmailDecorator(Notifier notifier) {
this.notifier = notifier;
}
public void send() {
notifier.send();
System.debug('Sending Email notification');
}
}
// Usage
public class NotificationSystem {
public static void run() {
// Basic notification
Notifier basicNotifier = new BasicNotifier();
basicNotifier.send();
// SMS notification
Notifier smsNotifier = new SMSDecorator(basicNotifier);
smsNotifier.send();
// SMS and Email notification
Notifier emailSmsNotifier = new EmailDecorator(smsNotifier);
emailSmsNotifier.send();
}
}
এই দুটি Pattern ব্যবহার করে Apex কোডের modularity এবং flexibility বাড়ানো যায়, যা অ্যাপ্লিকেশনকে আরও maintainable করে তোলে।
common.read_more