Factory Method জানার আগে জানতে হবে Method কি ?
শর্তমতো Class Diagram টা দাঁড়ায় -
আমরা চাইলে abstract class Service টা বাদ দিতে পারি । যেহেতু আমাদের প্রত্যেকটা সার্ভিসের সার্ভিস মানি ও কারেন্ট অবস্থা জানতে হবে তাই একটা abstract class এর মধ্যে কমন মেথড লিখে অন্যান্য সার্ভিস ক্লাসে override করিয়ে যার যার মতো ইমপ্লিমেন্ট করে নিয়েছি । এই কাজ টা একটা Interface তৈরি করেও করা যেতে পারে ।
When to use abstract classes and when to use interfaces ?
নিচে দেখুন, আমরা এখানে যখন যার অবজেক্ট দরকার হচ্ছে সেটা তৈরি করিয়ে নিচ্ছি । আগে থেকে সবগুলোর অবজেক্ট তৈরি করে সিস্টেম ভারী করে রাখছি না । এই টেকনিক -কে বলে loose coupling । যখন দরকার হবে তখনই তৈরি করে নিবো, আগে থেকে তৈরি করে মেমোরি ভর্তি করে রাখবো না । loose coupling এর আরো অনেক খুঁটিনাটি বিষয় আছে যেগুলো ভিন্ন আর্টিকেলে বিস্তারিত আসবে আপাতত এটুক জানলেই চলবে ।
আউটপুট :
পরামর্শ
Method একটা ছাঁচের মতো, আপনার প্রয়োজনীয় উপকরণ(প্যারামিটার) ছাঁচের মধ্যে দিবেন, ছাঁচ সেটা নিজের ফর্মুলা মতো উপকরণ প্রসেস করে একটা সুগঠিত ব্যবহারযোগ্য ফলাফল ফেরত(রিটার্ন) দিবে । তাহলে বলতে পারি একটা নির্দিষ্ট প্রসেসের কাজেই আমরা Method লিখি ।
Factory Method হচ্ছে বিশেষ ধরনের Method, যেটা রিকোয়েস্টেড সার্ভিস ক্লাসের Object Return করে ।
আমরা আবার সেই TeamPossible ইভেন্ট ম্যানেজমেন্ট ফার্মের উদাহরণে ফিরে যায় যেটা Facade Pattern এ ব্যবহার করছিলাম, যারা নিচের সার্ভিস গুলো দিয়ে থাকে
আমরা আবার সেই TeamPossible ইভেন্ট ম্যানেজমেন্ট ফার্মের উদাহরণে ফিরে যায় যেটা Facade Pattern এ ব্যবহার করছিলাম, যারা নিচের সার্ভিস গুলো দিয়ে থাকে
- খাবার আয়োজন (বাবুর্চির কাজ)
- চেয়ার টেবিল সাজানো, খাবার পরিবেশন (ডেকোরেটরের কাজ)
- বউ সাজানো (পার্লারের কাজ)
কিন্তু এবার আর আমাদের একসাথে সব সার্ভিসের দরকার নেই । যার যেটা দরকার সেটা অর্ডার করলেই TeamPossible সরবরাহ করবে ।
শর্তমতো Class Diagram টা দাঁড়ায় -
Factory Method Class Diagram |
এখানে আসল ম্যাজিক হচ্ছে GetService ক্লাসের callingService() মেথড । এটাই আমাদের Factory Method যেখানে প্রয়োজনমতো সার্ভিসের প্যারামিটার দিলে সেই সার্ভিস ক্লাসের Object create করে রিটার্ন করবে ।
আমরা চাইলে abstract class Service টা বাদ দিতে পারি । যেহেতু আমাদের প্রত্যেকটা সার্ভিসের সার্ভিস মানি ও কারেন্ট অবস্থা জানতে হবে তাই একটা abstract class এর মধ্যে কমন মেথড লিখে অন্যান্য সার্ভিস ক্লাসে override করিয়ে যার যার মতো ইমপ্লিমেন্ট করে নিয়েছি । এই কাজ টা একটা Interface তৈরি করেও করা যেতে পারে ।
When to use abstract classes and when to use interfaces ?
নিচে দেখুন, আমরা এখানে যখন যার অবজেক্ট দরকার হচ্ছে সেটা তৈরি করিয়ে নিচ্ছি । আগে থেকে সবগুলোর অবজেক্ট তৈরি করে সিস্টেম ভারী করে রাখছি না । এই টেকনিক -কে বলে loose coupling । যখন দরকার হবে তখনই তৈরি করে নিবো, আগে থেকে তৈরি করে মেমোরি ভর্তি করে রাখবো না । loose coupling এর আরো অনেক খুঁটিনাটি বিষয় আছে যেগুলো ভিন্ন আর্টিকেলে বিস্তারিত আসবে আপাতত এটুক জানলেই চলবে ।
ধরুন আমরা Cook এর সার্ভিস চাচ্ছি । তাহলে Cook এর অবজেক্ট তৈরি হবে । এবং নিচের মতো আউটপুট পাবো । একইভাবে এই callingService() মেথড দিয়ে অন্য সার্ভিসগুলোও পেতে পারি ।
আউটপুট :
পরামর্শ
প্রোগ্রামিং এ নতুন কিছু শিখে ভালো মতো আয়ত্ত করতে চাইলে কোড লেখা বা ঐ বিষয়ের problem solving এর আর কোন বিকল্প নেই । এখন HackerRank থেকে Factory Method Pattern এর প্রব্লেমটা সল্ভ করে ফেলুন । মনে রাখবেন, যায় শিখুন আর যতবারই পড়ুন না কেনো কোড না লিখলে সেটা আপনার আয়ত্তে আসবে না ।
THE END
Factory Method Pattern
Reviewed by hnjaman
on
July 08, 2018
Rating:
No comments: