কাদের জন্যঃ Object-oriented programming language সম্পর্কে ধারণা আছে এমন মানুষ।
যা প্রয়োজনঃclass,inheritance,composition,JavaScript সম্পর্কে পূর্ব ধারণা।
Flyweight:এটি Structural Design Pattern দলের। Memory consumption কমানোর জন্য এটি ব্যবহার করা হয়। এটি object এর intrinsic state (যা পরিবর্তন করা যায় না এবং share করা যায়) কে extrinsic state(যা unique এবং context এর উপর নির্ভর করে) থেকে আলাদা করে। উদাহরণে Address কিভাবে Address Book এ জমা রাখা হয় তা দেখানো হয়েছে। Address class এ name, city ও phone members হচ্ছে এর intrinsic state। আর des() এ sl নামে যে serial number দেয়া হচ্ছে তা extrinsic state। এখানে চাইলেই যখন খুশি name,city আর phone change করা যাবে না। কিন্তু user চাইলেই serial number পরিবর্তন করতে পারবে । AddBook class এর getAdd() এর মাধ্যমে user এর কাছ থেকে name,city ও phone number নিচ্ছে আর তা যদি নিজস্ব Address Book(যা Map/Dictionary data structure এবং এখানে শুধু book নামে পরিচিত)এ থাকে তবে তা return করছে নাহলে নতুন একটি Address object বানিয়ে তা book এ জমা করে return করছে।
উদাহরণ:
class Address {
constructor(name ,city,phone) {
this.name= name;
this.city= city;
this.phone = phone;
}
des(sl) {
document.write(`Sl no.:${sl} Name: ${this.name} ,City: ${this.city}, Phone: ${this.phone}
`);
}
}
class AddBook{
constructor() {
this.book = {};
}
getAdd(n, c, p) {
var key = `${n}-${c}-${p}`;
if (!this.book[key]) {
this.book[key] = new Address(n,c,p);
}
return this.book[key];
}
}
var b = new AddBook();
var firstAdd = b.getAdd('Unk','Noville', 12);
var secondAdd= b.getAdd('Bumb', 'Transzia',14);
firstAdd.des(1);
secondAdd.des(2);
চেষ্টা করা যাক: আরেকটি program লিখি Friends নামে। এখানে শুধু name আর address নামে দু'টি members থাকবে যা intrinsic state নির্দেশ করে। আর des() এ pseudo নামে একটি argument pass করা হবে যা Friends দের pseudo name কে বোঝাবে।
কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে 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