Sunday, March 17, 2024

অবজার্ভার

কাদের জন্যঃ Object-oriented programming language সম্পর্কে ধারণা আছে এমন মানুষ।

যা প্রয়োজনঃclass,inheritance,composition,JavaScript সম্পর্কে পূর্ব ধারণা।

Observer:যখন দেখা যায় Objectsদের মধ্যে একটির উপর বাকিরা নির্ভর করে এবং একটির অবস্থার পরিবর্তনের জন্য বাকিদের অবস্থার পরিবর্তনের দরকার পড়ে তখন Observer Design Pattern এর প্রয়োজন পড়ে। এটি Behavioral Design Pattern দলের। প্রধান Components হচ্ছে: Subject এবং Observer। Subject object তার মাঝে এক ঝাক Observer object কে ধারণ করে। Subject object এর যেকোন পরিবর্তন ঘটলে তা Observer object এর method(এখানে update()) এর মাধ্যমে সবাইকে জানিয়ে দেয়া হয়। এটি Publisher-Subscriber নামেও পরিচিত। উদাহরণে class Notifier হচ্ছে আমাদের subject আর MemIntface হচ্ছে Observer Interface আর Member হচ্ছে এর implementation। Notifier এর constructorএ array এর সাহায্যে একগুচ্ছ Observer object সংরক্ষণ করা হচ্ছে। add() আর unsubscribe() হচ্ছে arrayতে item যোগ এবং বাদ দিতে যথাক্রমে push() ও splice() এর মত array methods প্রয়োগ করছে। notifyall() এর মাধ্যমে সকল Observer objectএর update() এর মাধ্যমে পরিবর্তন সম্পর্কে জানানো হচ্ছে। newChange() এ parameter হিসেবে পরিবর্তন টি কি সেটি pass/দেয়া হচ্ছে,তারপর নতুন পরিবর্তনটি কি সেটি constructor এ ঠিক করে সবাইকে notify করা হচ্ছে notifyall() এর মাধ্যমে।

উদাহরণ:
//Observer
class MemIntface{
constructor(){}
update(b){}
}
class Member extends MemIntface{
constructor(c){
super();
this.c=c;
}
getS(){return this.c;}
update(b){
document.write("Dear Mr. "+this.getS()+" a change called '"+b+"' has taken place in our organization.
");
}
}
//Subcject
class Notifier{
constructor(z){
this.z=z;
this.a=[];
this.l=" ";
}
add(m){ this.a.push(m);
}
unsubscribe(integ)
{
this.a.splice(integ,1);
}
notifyall(){
for(var j=0;j < this.a.length ; j++){
this.a[j].update(this.l);
}
}
newChange(b){
this.l=b;
this.notifyall();
}
}
var m=new Member("A");
var z=new Member("B");
var t=new Member("C");
var k=new Notifier("h");
k.add(m);
k.add(z);
k.add (t);
k.unsubscribe(1);
k.newChange("PQR");

চেষ্টা করা যাক:একটি Club তার member দের তার নতুন ফোন নাম্বার পরিবর্তন সম্পর্কে জানাবে। এখানে Subject হচ্ছে Club আর Member আগের মতই Observer। newChange() এর বদলে newPhone() নামের method থাকবে। বাকি সব আগের মতই থাকবে।

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, আকর বই "'Design Patterns:Elements Of Reusable Object-Oriented Software' by Eric Gamma,Richard Helm,Ralph Johnson and John Vlissides(Addisson-Wesley.1994)" ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com

No comments:

Post a Comment