PHP Interface দিয়ে Strategy Design Pattern (বাংলা টিউটোরিয়াল)
Strategy Pattern একটি Behavioral Design Pattern যার মাধ্যমে আমরা কোন নির্দিষ্ট কাজ করার বিভিন্ন উপায় আলাদা করে রাখতে পারি এবং runtime-এ যেকোনো একটি স্ট্র্যাটেজি বেছে নিতে পারি।
এতে মূলত interface-এর মাধ্যমে বিভিন্ন algorithm বা behavior define করে, যেগুলো interchangeable হয়। এতে flexibility ও scalability বাড়ে।
বাস্তব উদাহরণ: Payment System
ধরা যাক আপনি একটি ই-কমার্স সাইটে বিভিন্ন পেমেন্ট গেটওয়ে (Bkash, Nagad, Paypal) ব্যবহার করতে চান। তাহলে Strategy Pattern ব্যবহার করে সেটি করা যাবে সহজেই।
<?php
// Step 1: Interface তৈরি করুন
interface PaymentStrategy {
public function pay($amount);
}
// Step 2: বিভিন্ন স্ট্র্যাটেজি তৈরি করুন
class BkashPayment implements PaymentStrategy {
public function pay($amount) {
echo "Bkash দিয়ে " . $amount . " টাকা প্রদান করা হয়েছে।<br>";
}
}
class NagadPayment implements PaymentStrategy {
public function pay($amount) {
echo "Nagad দিয়ে " . $amount . " টাকা প্রদান করা হয়েছে।<br>";
}
}
class PaypalPayment implements PaymentStrategy {
public function pay($amount) {
echo "Paypal দিয়ে " . $amount . " টাকা প্রদান করা হয়েছে।<br>";
}
}
// Step 3: Context ক্লাস তৈরি করুন
class PaymentContext {
private $strategy;
public function __construct(PaymentStrategy $strategy) {
$this->strategy = $strategy;
}
public function setStrategy(PaymentStrategy $strategy) {
$this->strategy = $strategy;
}
public function payNow($amount) {
$this->strategy->pay($amount);
}
}
// Step 4: ব্যবহার
$payment = new PaymentContext(new BkashPayment());
$payment->payNow(1000);
$payment->setStrategy(new NagadPayment());
$payment->payNow(1500);
$payment->setStrategy(new PaypalPayment());
$payment->payNow(2000);
?>
কী শিখলেন?
- Interface ব্যবহার করে ভিন্ন ভিন্ন কাজের জন্য আলাদা Strategy define করা যায়।
- নতুন পেমেন্ট মেথড যোগ করতে চাইলে শুধু একটি নতুন ক্লাস বানালেই হবে, বাকি কোডে কোনো পরিবর্তন লাগবে না।
- কোড আরও সহজে maintain ও extendable করা যায়।
Interface ব্যবহার করে Strategy Pattern কোথায় উপকারী?
- পেমেন্ট সিস্টেম
- লগিং (file log, db log)
- ইমেইল সেন্ডার (SMTP, API)
- ডিসকাউন্ট ক্যালকুলেশন
- File Uploader (local, S3, FTP)
উপসংহার
Interface-এর মাধ্যমে Strategy Pattern ব্যবহার করলে আপনি আপনার কোডকে আরও modular, maintainable এবং testable করতে পারবেন।
এটি Dependency Injection ও Open/Closed Principle-এর বাস্তব প্রয়োগ।