Saturday, February 17, 2024

ফ্যাক্টরি মেথড প্যাটার্ন

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

যা প্রয়োজনঃ class,inheritance, constructor overloading,JavaScript সম্পর্কে পূর্ব ধারণা।
Factory Method Patternঃ object তৈরির জন্য এমন এক interface বানাতে হবে যেখানে subclass/derived class ঠিক করবে কোন object তৈরি করতে হবে। Design pattern এর আদি বই "'Design Patterns:Elements Of Reusable Object-Oriented Software' by Eric Gamma,Richard Helm,Ralph Johnson and John Vlissides(Addisson-Wesley.1994" এ এভাবেই বলা হয়েছে Factory Method pattern সম্পর্কে ।এটি creational design pattern এর দলভুক্ত। ধরা যাক একটি পণ্য,তার দাম(p) ও পরিমাণ(q) ,আমাদের বিবেচনার বিষয়। তাহলে আমাদের পণ্যের Abstract class/interface এ p এবং q এই দু'টি জিনিস অবশ্যই থাকবে আর des() নামে একটি function/method থাকবে যার সাহায্যে পণ্যের দাম ও পরিমাণ জানানো যাবে। এরপর আমরা যত খুশি Implementing/Derived/Sub class তৈরি করতে পারব। আর আমাদের লাগবে এমন একটি interface যেখানে subclass চাহিদা মত সঠিক object তৈরি করবে।

উদাহরণে একটি পণ্যের দাম 20 এবং অপরটির দাম 30 টাকা। তাই দু'টি পণ্যের জন্য দু'টি implementing class (Imp এবং Imp2) ব্যবহার করা হয়েছে। এর বাইরে আরেকটি class /interfaceব্যবহার করা হয়েছে Manager নামে যার show() method যে পণ্য সম্পর্কে তথ্য দরকার তার নাম argument হিসেবে নিবে এবং সে অনুযায়ি object তৈরি করবে।Object তার des() method এর মাধ্যমে পণ্যের দাম ,পরিমাণ জানিয়ে দিবে। কাজেই Manager হচ্ছে আমাদের Factory Method Interface এবং show() হচ্ছে Factory method.

উদাহরণঃ (script tag এর ভেতর নিচের কোড বসবে)
class ABS{
constructor(p,q){
this.p=p;
this.q=q;
}
des(){
return 'description goes here';
}
}
class Imp extends ABS{
constructor(p,q){
super(p,q);
}
static plain(p,q){
return new Imp (0,0);
}
static setP(p,q){
return new Imp(20,1);
}
des(){
document.writeln(this.p+" "+this.q);
}
}
class Imp2 extends ABS{
constructor(p,q){
super(p,q);
}
static plain(p,q){
return new Imp (0,0);
}
static setP(p,q){
return new Imp(30,1);
}
des(){
document.writeln(this.p+" "+this.q); }
}
class class Manager{
constructor (){
}
show (w){
if (w=="imp"){
var s= Imp.setP();
return s;
}
else if(w=="imp2") {
var s= Imp2.setP();
return s;
}
else{
document.writeln("Sorry, not defined!\n");
}
}
}
var m=new Manager();
var a=m.show("imp2");
a.des();

চেষ্টা করে দেখা যাকঃ Furniture নামের abstract class বানাই, যার তিনটি বৈশিষ্ট্য আমরা হিসেবে নিব--- দাম,পরিমাণ ও রঙ ।এর একটি des() method থাকবে। এরপর আমরা Sofa,Chair,Bookshelf এসব Derived class এর মাধ্যমে Factory Method Pattern ব্যবহার করে Furniture abstract class এর প্রয়োগ করব।ShopManager নামে একটি interface থাকবে Factory 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