Vivasoft-logo

 7.4 Factory Pattern ব্যবহার করে ক্লাস তৈরি করা:

 

আমরা Factory Pattern সম্পর্কে জেনেছি। দেখেছি কীভাবে Factory Function ব্যবহার করতে হয়। আজ আমরা দেখব কীভাবে Factory Pattern ব্যবহার করে ক্লাস তৈরি করা যায়।

Factory Pattern সম্পর্কে আমরা জানি যে, এটি দিয়ে অবজেক্ট তৈরি করা যায় ডিরেক্টলি new কিওয়ার্ড ব্যবহার না করে। তার পরিবর্তে এইটা একটা কমন ইন্টারফেস তৈরি করে যা সাবক্লাসগুলো দিয়ে অবজেক্ট তৈরি করে। ধরা যাক, একটা cake এর ফ্যাক্টরিতে হরেক রকমের cake তৈরি করা হয়। যেমনঃ চকলেট, পাউন্ড আর বিস্কুট cake। এক্ষেত্রে আমরা কীভাবে ফ্যাক্টরি প্যাটার্ন ফলো করে কাজ করব? নিচের উদাহরণটি খেয়াল করি।

 
 
 
class CakeFactory {
constructor(){
this.createCake = function(flavor){
let cake;
if(flavor === “chocolate”){
cake = new ChocolateCake();
}
else if(flavor === “biscuit”){
cake = new BiscuitCake();
}
else if(flavor === “pound”){
cake = new PoundCake();
}
return cake;
}
}
}
 
class ChocolateCake {
constructor(){
this.cakeFlavor = “Chocolate Cake”;
this.made = function (){
console.log(“You made “+this.cakeFlavor)
}
}
}
 
class BiscuitCake {
constructor(){
this.cakeFlavor = “Biscuit Cake”;
this.made = function (){
console.log(“You made “+this.cakeFlavor)
}
}
}
 
class PoundCake {
constructor(){
this.cakeFlavor = “Pound Cake”;
this.made = function (){
console.log(“You made “+this.cakeFlavor)
}
}
}
 
const cakeFactory = new CakeFactory();
const chocolate = cakeFactory.createCake(“chocolate”);
const pound = cakeFactory.createCake(“pound”);
const biscuit = cakeFactory.createCake(“biscuit”)
chocolate.made() // আউটপুটঃ You made Chocolate Cake
pound.made() // আউটপুটঃ You made Pound Cake
biscuit.made() // আউটপুটঃ You made Biscuit Cake
 

 

দেখতে অনেক বড় হলেও কোডটি সহজ। সবার উপরে আমরা CakeFactory নামে একটা ক্লাস তৈরি করেছি, যা একটি জেনেরিক টেম্পলেট হিসেবে কাজ করবে অন্যান্য সাবক্লাস দিয়ে অবজেক্ট তৈরি করার জন্য। মানে, ChocolateCakePoundCake আর BiscuitCake ক্লাসগুলোকে দিয়ে অবজেক্ট তৈরি করে। CakeFactory ক্লাসের constructor এ একটি ফাংশন আছে createCake নামে যা প্যারামিটার হিসেবে flavor নেয়, যদি flavor chocolate হয় তাহলে ChocolateClass এর একটি অবজেক্ট তৈরি হবে, অন্যান্য flavor হলে অন্যান্য ক্লাসের অবজেক্ট তৈরি হবে।

এভাবেই আমরা Factory টেম্পলেট ব্যবহার করে একই রকমের আলাদা আলদা অবজেক্ট তৈরি করতে পারি।

  • Person নামের একটি ক্লাস তৈরি করা হয়েছে যার name ও age নামের ২ টি এট্রিবিউট আছে যা কন্সট্রাক্টরের মধ্যে ইনিশিয়ালাইজ করা হয়েছে এবং এর printName নামের একটি মেথড রয়েছে।
class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
printName(){
console.log(name);
}
}
//creating object of the Person class
const new_person = new Person(‘Alex’, 20)
 
  • Rectangle নামের একটি ক্লাস তৈরি করা হয়েছে যার height ও width নামের ২ টি এট্রিবিউট আছে যা কন্সট্রাক্টরের মধ্যে ইনিশিয়ালাইজ করা হয়েছে এবং এর getHeight ও getWidth নামের দুটি মেথড রয়েছে.
    class Rectangle {
    constructor(height, width) {
    this.height = height;
    this.width = width;
    }
    getHeight(){
    return this.height;
    }
    getWidth(){
    return this.width;
    }
    }
    const rectangle20x30 = new Rectangle(20,30);
  •  Animal নামের একটি ক্লাস তৈরি কর যার মধ্যে name, color, canFly(boolean), canswimm(boolean) নামের এট্রিবিউট এবং speak, eat, run নামের ৩ টি মেথড থাকবে।
  • const myCar = {
    make: ‘Ford’,
    model: ‘Mustang’,
    year: 1969,
    start: function(){
    console.log(‘Engine started’);
    },
    stop: function(){
    console.log(‘Engine stoped’);
    }
    };
    উপরোক্ত অবজেক্ট টিকে ক্লাসে রূপান্তরিত কর এবং অবজেক্ট ক্রিয়েট কর।
  • ক্লাস কেন ব্যবহার করা হয় অব্জেক্ট তৈরির জন্যে?
  • ক্লাসের মধ্যে this কিওয়ার্ড এর কাজ কি?
  • মেথড ও কন্সট্রাক্টটর আলাদা কীভাবে?