OOP

টেমপ্লেট মেথড ডিজাইন প্যাটার্ন

টেমপ্লেট মেথড ডিজাইন প্যাটার্ন

নাম শুনেই বোঝা যাচ্ছে অনেক বিদঘুটে কোন টপিক হবে…।

উইকি রেফারেন্স: In software engineering, the template method pattern is a behavioral design pattern that defines the program skeleton of an algorithm in an operation, deferring some steps to subclasses. It lets one redefine certain steps of an algorithm without changing the algorithm’s structure.

কিন্তু না এটা অনেক সহজ একটা ব্যাপার অনেক সহজভাবে বলতে জাস্ট কোডের (স্ট্রাকচার ঠিক রেখে) ডুপ্লিকেশন রোধ করা।

বাজারে এখন চাল,পেঁয়াজের দাম অনেক তো একটা প্রোগ্রাম লিখলে কেমন হয় যেটা চাল পেঁয়াজের দাম অার কিছু ফ্রি অ্যাডভাইস দিবে।

অামরা তাহলে পেঁয়াজের জন্য একটা ক্লাস লিখি প্রথমে

এখানে  ডিটেলস মেথড থেকে অন্য ফাংশনগুলো কল করা হয়েছে ।  ফাংশনগুলো একটার সাথে অার একটা এভাবে চেইন অাকারে লেখাকে বলে মেথড চেইনিং। অার অন্য ফাংশনগুলোতে জাস্ট  ডাটা গুলো প্রিন্ট দেয়া হয়েছে।

একইভাবে চালের ডিটেলস দেখার জন্য অার একটা ক্লাস লিখবো এক্সাক্ট সেইম শুধু onionPerKg এর পরিবর্তে ricePerKg ফাংশন হবে যেটা ধরা যাক 70 রিটার্ন করবে এটুকুই পার্থক্য ।

তাহলে কি দাড়াচ্ছে দুটো ক্লাসে অামরা কিছু কমন কাজ করেছি যেমন advice() alternative() দুটো ফাংশনের কাজ কিন্তু এক্সাক্ট সেইম। তাহলে সেম কোড দুুদুবার না করে অামরা একটা অ্যাবস্ট্রাক্ট ক্লাস লিখে  ফেলি অার সেখান থেকে বরং এগুলো ইনহেরিট করি। এখানে অ্যাবস্ট্রাক্ট ক্লাস নিয়ে লেখা।

এখন এই অ্যাবস্ট্রাক্ট ক্লাস থেকে Class Onion & Class Rice  ইনহেরিট করবে। তাহলে দুটো ক্লাসেই কিন্তু অার advice() alternative() ফাংশনের দরকার নেই।

বাকি থাকল details() অার প্রাইজ রিটার্ন করার ফাংশনটা। details() ফাংশনটাও এবার অ্যাবস্ট্রাক্ট ক্লাসে অ্যাড করে দেই। ঝামেলা হলো details() থেকে  onionPerKg() কল করবো নাকি ricePerKg() কল করবো।

ওয়েল দুটোর কোনটাই কল না করে অামরা একটা কমন ফাংশন নেই যেটার টাইপ হবে অ্যাবস্ট্রাক্ট, ধরা যাক Price() । তাহলে ইনহেরিট করা সব ক্লাসেই Price() অ্যাড করতে হবে। অার ইনহেরিটেড  ক্লাসগুলোতে onionPerKg() এবং ricePerKg() কে চেঞ্জ করে Price() বানিয়ে দেই।

তাহলে দিনশেষে অামাদের ক্লাসগুলো দাঁড়াবে এমন:

এখন পেঁয়াজের একটা নিউ ইন্সট্যান্স তৈরি করে রান করে দেখি কি অাসে:

এরকম অাসবে অবশ্যই । তাহলে অামরা সাকসেসফুলি অামদের কোড থেকে ডুপ্লিকেশন দুর করলাম অার এটাই মোটামুটি টেমপ্লেট মেথড ডিজাইন প্যাটার্ন এর মৌলিক ধারনা।

Hope I didn’t make any mistake . – Thanks All

Share this post
Be the First to comment.

Leave a Comment

Your email address will not be published. Required fields are marked *