Monday, March 4, 2024

আ্যব্সট্রাক্ট ফ্যাক্টরি

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

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

Abstract Factory: এটি তৈরি করে এমন এক interface যা একই ধরণের object গঠন করতে সাহায্য করে। এটি ব্যবহার করতে হয় যখন একটি system আলাদা থাকবে object গঠন ও প্রতিনিধিত্ব থেকে। একই ধরণের product এর objects কে একসাথে ব্যবহারের জন্য design করতে হলেও এর ব্যবহার করতে হয়।এটি client/user কে আলাদা করে class implementation থেকে। client /user কেবল abstract interface এর মাধ্যমে object কে manipulate করতে পারে। উদাহরণে Product এবং Shop interface দু'টির implementation হচ্ছে যথাক্রমে Pastry ও Flour এবং PastryShop ও Grocery। PastryShop এর des() মেথডে Pastry এর object গঠন করে তার des() methodকে ডাকা হচ্ছে। একই ঘটনা ঘটছে Grocery তে Flour objectকে ঘিরে। Shopmaker class এর সাহায্যে client কেবল shop() মেথডের মাধ্যমে যে ধরণের shop চায় তা string argument এর মাধ্যমে জানিয়ে দিবে। এখানে আগে থেকে shop abstract class এর object তৈরি করা আছে। string argument অনুযায়ী সংশ্লিষ্ট class object তৈরি করে তা assign করা হবে abstract object কে। Default হিসেবে PastryShop এর object গঠন করা হয়েছে। কাজেই এখানে client/user কে Product ও Shop এর Implementations থেকে আলাদা করা হয়েছে।এটি Creational Design Pattern দলের।

উদাহরণ:
class Product{
constructor (){}
des(){}
}
class Pastry extends Product{
constructor(){super();}
des(){
return " Pastry and cakes.";
}
}
class Flour extends Product{
constructor (){super();}
des(){
return " Flour";
}
}
class Shop{
constructor(){}
des(){}
}
class PastryShop extends Shop {
constructor(){super();}
des(){
var p=new Pastry();
document.write("Pastry shop sells "+p.des()+"
"); }
}
class Grocery extends Shop {
constructor(){super();}
des(){
var f=new Flour();
document.writeln("Grocery sells "+f.des()+"
");
}
}
class ShopMaker{
constructor (){}
shop(s){
var a=new Shop();
if( s=="pastry") {
a=new PastryShop();
return a;
}
else if(s=="grocery"){
a=new Grocery();
return a;
}
else{
a=new Pastry ();
return a;
}
}
}
var s=new ShopMaker();
var k=s.shop("grocery");
k.des();

চেষ্টা করা যাকঃ Rack ও Item নামের দু'টি interface বানাই যাদের যথাক্রমে BookShelf ও ShoeRack এবং Book ও Shoe নামের subclass থাকবে। এদের des() মেথড থাকবে। BookShelf এর des() দেখাবে "On bookshelf, we keep books." বার্তা আর ShoeRack এর des() দেখাবে "On shoerack, we keep shoes." বার্তা। RackMaker নামে আরেকটি class থাকবে যেটির rack() মেথড client/user এর পছন্দ অনুযায়ী Rack object তৈরি করবে।

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