সংজ্ঞা
অবজেক্টর প্যাটার্ন ব্যবহার করা হয় যখন বস্তুর মধ্যে অনেকের মধ্যে একটির সম্পর্ক থাকে যেমন যদি কোনও বস্তুটি সংশোধন করা হয় তবে এর নির্ভরশীল অবজেক্টগুলি স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি করতে হবে এবং সমস্ত নির্ভরশীল বস্তুর সাথে সম্পর্কিত পরিবর্তনগুলি করা হবে।
উদাহরণ
ধরা যাক, আপনার স্থায়ী ঠিকানা পরিবর্তন করা হয়েছে তবে আপনাকে পাসপোর্ট কর্তৃপক্ষ এবং প্যান কার্ড কর্তৃপক্ষকে অবহিত করতে হবে। সুতরাং এখানে পাসপোর্ট কর্তৃপক্ষ এবং প্যান কার্ড কর্তৃপক্ষ পর্যবেক্ষক এবং আপনি একটি বিষয়।
ফেসবুকেও, আপনি যদি কারও সাবস্ক্রাইব করেন তবে যখনই নতুন আপডেট আসে তখন আপনাকে অবহিত করা হবে।
কখন এটি ব্যবহার করবেন:
যখন কোনও বস্তু তার স্থিতি পরিবর্তন করে, তারপরে অন্যান্য সমস্ত নির্ভরশীল অবজেক্টগুলিকে অবশ্যই ধারাবাহিকতা বজায় রাখতে তাদের রাষ্ট্র পরিবর্তন করতে হবে
বিষয়টি পর্যবেক্ষকের সংখ্যা সম্পর্কে জানতে পারে না।
যখন কোনও বস্তু হ'ল অবজেক্টগুলি না জেনে অন্য বিষয়গুলিকে অবহিত করতে সক্ষম হবে।
ধাপ 1
সাবজেক্ট ক্লাস তৈরি করুন।
Subject.java
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers
= new ArrayList<Observer>();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
ধাপ ২
পর্যবেক্ষক শ্রেণি তৈরি করুন।
Observer.java
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
ধাপ 3
কংক্রিট পর্যবেক্ষক ক্লাস তৈরি করুন
BinaryObserver.java
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Binary String: "
+ Integer.toBinaryString( subject.getState() ) );
}
}
OctalObserver.java
public class OctalObserver extends Observer{
public OctalObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Octal String: "
+ Integer.toOctalString( subject.getState() ) );
}
}
HexaObserver.java
public class HexaObserver extends Observer{
public HexaObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Hex String: "
+ Integer.toHexString( subject.getState() ).toUpperCase() );
}
}
পদক্ষেপ 4
সাবজেক্ট এবং কংক্রিট পর্যবেক্ষক বস্তু ব্যবহার করুন।
ObserverPatternDemo.java
public class ObserverPatternDemo {
public static void main(String[] args) {
Subject subject = new Subject();
new HexaObserver(subject);
new OctalObserver(subject);
new BinaryObserver(subject);
System.out.println("First state change: 15");
subject.setState(15);
System.out.println("Second state change: 10");
subject.setState(10);
}
}
পদক্ষেপ 5
আউটপুট যাচাই করুন।
প্রথম রাষ্ট্র পরিবর্তন: 15
হেক্স স্ট্রিং: এফ
অক্টাল স্ট্রিং: 17
বাইনারি স্ট্রিং: 1111
দ্বিতীয় রাষ্ট্র পরিবর্তন: 10
হেক্স স্ট্রিং: এ
অক্টাল স্ট্রিং: 12
বাইনারি স্ট্রিং: 1010