Prototype Pattern এবং Decorator Pattern খুবই কাছাকাছি ধরনের। আগে একটা উদাহরন দেখি -
ধরুন 2 একটা সংখ্যা
2 + 3 = 5
2 + 4 = 6
2 + 8 = 10
দেখুন এখানে প্রতি ক্ষেত্রে 2 এর সাথে অন্য যে কোন সংখ্যা যোগ করে নতুন Result পাওয়া গেছে। এটা হচ্ছে Prototype Pattern, 2 কমন উপাদান।
ধরুন 2 একটা সংখ্যা
2 + 3 = 5
2 + 4 = 6
2 + 8 = 10
দেখুন এখানে প্রতি ক্ষেত্রে 2 এর সাথে অন্য যে কোন সংখ্যা যোগ করে নতুন Result পাওয়া গেছে। এটা হচ্ছে Prototype Pattern, 2 কমন উপাদান।
অপর দিকে যদি এমন হতো
2 + 3 = 5 , এখানে 2 Prototype
আবার, 5 + 4 = 9 , এখানে 5 Prototype
আবার , 9 + 8 = 17, এখানে 9 Prototype
আসলে Decorator হচ্ছে Prototype এর একটা ধারা
(2) + 3 = (5) + 4 = (9) + 8 =17
1 2 3
একটা Prototype এর সাথে নতুন Feature যুক্ত হয়ে যে Result হচ্ছে , সেটার পরবর্তীতে সাথে New Feature যুক্ত হয়ে New Prototype হবে।
এতক্ষণ আমি যা বললাম সেটা শুধু কনসেপ্ট বোঝানোর জন্য এবং prototype ও decorator pattern এর মাঝে সাদৃশ্য দেখানোর জন্য । বাস্তবে এ দুটো আলাদা দুই ধরনের pattern । design pattern ৩ ধরনের
- Creational | কার অবজেক্ট কিভাবে কখন তৈরি হবে এবং কিভাবে ব্যবহার হবে সেটা নির্ধারণ করে ।
- Structural | ক্লাস এবং অবজেক্ট একের অপরের সাথে সংযুক্ত হয়ে বড় স্ট্রাকচার দাঁড় করাবে ।
- Behavioral | ক্লাস এবং অবজেক্ট কার সাথে কিভাবে connected হয়ে কিভাবে কাজ করবে ।
Decorator pattern এর একটা বাস্তব উদাহরণ দেখি, আপনাদের শাপলা হোটেলের কথা মনে আছে ???আমাদের রিকোয়ারমেন্ট অনুযায়ী class diagram বানানো শেষ লক্ষ্য করুন
শাপলা হোটেলে এখন ভর্তা প্যাকেজ চালু হয়েছে ২৫ টাকাই । মাছ মুরগী আগের মতোই আছে। কেউ খাবার খেতে চাইলে ডিফল্ট ভাবে ভর্তা প্যাকেজের ২৫ টাকা বিল হবে। কেউ আলাদা ভাবে মাছ বা মুরগী চাইলে, ভর্তা প্যাকেজের সাথে মাছ বা মুরগীর মূল্য যোগ হয়ে বিল হবে ।
Food একটা abstract class যার মধ্যে ২ টা abstract method আছে। FoodDecorator এবং VortaPackage, Food class কে extends করে abstract method দুটো override করবে । এছাড়াও FoodDecorator ক্লাসে constructor এ plainFood নামে Food type এর প্যারামিটার দেয়া হয়েছে । একই কাজ FoodDecorator ক্লাসের সাবক্লাস Mas, Murgi তেও করা হয়েছে যার কারনে আমরা main() মেথড থেকে Mas এর অবজেক্ট তৈরি সময় আমাদের ডিফল্ট খাবার VortaPackage জুড়ে দিতে পেরেছি ।
এইটাই Decorator ।
এবার ধুপধাপ কোড লিখে ফেলুন
Food mas = new Mas(new VortaPackage());
Decorator Class Diagram |
Output:
THE END
Decorator Pattern
Reviewed by hnjaman
on
June 11, 2018
Rating:
No comments: