ডেকোরেটর ডিজাইন প্যাটার্ন কী?
এবং আপনি আপনার রুবি প্রজেক্টে এই প্যাটার্ন কীভাবে ব্যবহার করতে পারেন?
ডেকোরেটর ডিজাইন প্যাটার্ন আপনাকে একটি অবজেক্টকে নতুন ক্ষমতা যোগ করে সমৃদ্ধ করতে সাহায্য করে ক্লাস পরিবর্তন না করে।
আসুন একটি উদাহরণ দেখি!
লগিং এবং পারফরম্যান্স
এই উদাহরণে আমরা rest-client এর মতো একটি জেম ব্যবহার করে HTTP রিকোয়েস্ট করছি।
এটি এরকম দেখায়:
require 'restclient'
data = RestClient.get("www.rubyguides.com")
এখন:
মান লেন আমরা আমাদের কিছু রিকোয়েস্টে লগিং যোগ করতে চাই, এবং আমরা RestClient মডিউল পরিবর্তন করতে চাই না।
আমরা এটি ডেকোরেটর প্যাটার্ন ব্যবহার করে করতে পারি।
এখানে আমাদের লগিং মডিউল:
module LogHTTPRequest
def get(url)
puts "Sending Request For #{url}"
super
end
end
এটি স্ক্রিনে আমাদের পছন্দের তথ্য প্রিন্ট করবে তারপর RestClient থেকে আসল get মেথড কল করবে।
একটি রিকোয়েস্টে লগিং ক্ষমতা যোগ করতে আপনি extend মেথড ব্যবহার করতে পারেন।
এভাবে:
class HTTPClient
def initialize(client = RestClient)
@client = client
end
def get(*args)
@client.get(*args)
end
end
client = HTTPClient.new
client.extend(LogHTTPRequest)
client.get("rubyguides.com")
আপনাকে এই HTTPClient র্যাপার ক্লাস তৈরি করতে হবে কারণ RestClient একটি মডিউল এবং আপনি মডিউল থেকে অবজেক্ট তৈরি করতে পারেন না।
ডেকোরেটর প্যাটার্ন কখন ব্যবহার করবেন
এই প্যাটার্নের সৌন্দর্য হলো আপনি শুধু একটি অবজেক্ট সমৃদ্ধ করছেন, তাই আপনার একটি নন-লগিং ক্লায়েন্ট এবং একটি লগিং ক্লায়েন্ট থাকতে পারে।
আরেকটি সুবিধা হলো আপনি এই ডেকোরেটরগুলো লেয়ার করতে পারেন এবং একটি পারফরম্যান্স টেস্টিং করতে পারে, আরেকটি লগিং করতে পারে, ইত্যাদি।
ডেকোরেটর কম্বাইন করা সম্ভব হতো না যদি আপনি ইনহেরিটেন্স ব্যবহার করে HTTPClientWithLogging, এবং HTTPClientWithPerformanceTesting ক্লাস তৈরি করতেন।

আপনি WithLogging এবং WithPerformanceTesting একসাথে রাখতে পারবেন না যদি না আপনি এই ক্লাসটি তৈরি করেন...
class HTTPClientWithLoggingAndPerformanceTesting # ... end
ডেকোরেটর প্যাটার্ন সমাধান করে এই সমস্যাটি কোড ডুপ্লিকেশন এড়াতে এবং পাগল ক্লাস নাম এড়াতে।
ভিডিও
সারসংক্ষেপ
আপনি ডেকোরেটর ডিজাইন প্যাটার্ন সম্পর্কে শিখতে পেরেছেন, এই প্যাটার্ন আপনাকে অবজেক্টগুলিতে নতুন ক্ষমতা যোগ করতে সাহায্য করে ক্লাস পরিবর্তন না করে।
নিষ্ক্রিয় থাকবেন না! এখন আপনার পালা প্র্যাক্টিস করতে এবং এই কনসেপ্টটি নিজে প্রয়োগ করতে। এটি আপনাকে সেটি মনে রাখতে সাহায্য করবে যখন আপনার দরকার হবে।
এই আর্টিকেলটি শেয়ার করুন যাতে আরও মানুষ এটি পড়তে পারে 🙂