Sunday, March 3, 2024

ডেকোরেটর

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

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

Decorator: এটি object এ বাড়তি বৈশিষ্ট্য/দায়িত্ব যোগ করে থাকে।নাম শুনেই বোঝা যায় এটি objectকে decorate করছে।program এ বৈশিষ্ট্য বাড়াতে এটি subclassing এর বিকল্প হিসেবে কাজ করে।এই বৈশিষ্ট্য/দায়িত্ব যোগ করবার ঘটনাটি ঘটে মূলতঃ runtime এ । Decorator class টি মূল class/Component class টিকে মুড়ে ফেলে বলে একে wrapper ও বলা হয়।
উদাহরণে Greet এর subclass হল CoGreet,Decorator ও AddDecorator। Decorator ও AddDecorator subclass এর constructor এ CoGreet কে reference হিসেবে নেয়া হয়েছে। Decorator এর des() method এ Cogreet এর des() method এর সাথে বাড়তি বৈশিষ্ট্য(যেটি user দিবে) যোগ করা হচ্ছে। AddDecorator এ আবার বৈশিষ্ট্য যোগ হচ্ছে এর উপর।কাজেই এখানে CoGreet এর des() method কে Decorator ও AddDecorator এর বাড়তি বৈশিষ্ট্য দিয়ে মুড়ে দেয়া হচ্ছে।runtime এ Decorator object এ ‘~~~’ এবং AddDecorator object এ ‘####’ দু'টি নকশা CoGreet object এ যোগ করা হয়েছে। User এর খুশিমত নকশা এখানে runtime এ যোগ করা যাচ্ছে ,আলাদা করে subclass করতে হচ্ছে না।Structural Design Pattern এর দলে Decorator পরে।

উদাহরণ:
class Greet{
constructor(){}
des(){}
}
class CoGreet extends Greet{
s="Hello! Decorator example!";
d=03;
m=03;
y=2024;
constructor(){
super();
}
des(){
document.write(this.s+this.d+"/"+this.m+"/"+this.y);
}
}
class Decorator extends Greet{
constructor(a,r){
super();
this.a=a;
this.r=r;
}
des() {
return this.r.des()+this.a;
}
}
class AddDecorator extends Greet{
constructor(a,r){
super();
this.a=a;
this.r=r;
}
des() {
return this.r.des()+this.a;
}
}
var g= new CoGreet();
var s=new Decorator("~~~~~~~~~~~~~~~~~",g);
var w=new AddDecorator("####################", s);
document.write(w.des());

চেষ্টা করা যাক: একটি program লিখি যেখানে নাম ও নামের নিচে ‘πππππ’ নকশা দেখা যাবে। Name নামের interface থাকবে যার subclass হিসেবে থাকবে FullName ও Decorator। এদের des() নামের method থাকবে। দ্বিতীয়বার program run করবার সময় 'πππππ'বাদ দিয়ে পছন্দমত নকশা যোগ করি।

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে 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